| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 529 人关注过本帖
标题:ACM求助。
取消只看楼主 加入收藏
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
ACM求助。
http://www.

输出-1时需要判断多少次?10^k?

希望大牛提示一下,纠结了
搜索更多相关主题的帖子: 多少 希望 
2012-12-29 12:42
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
回复 2楼 冰冻零点
提示给我一个思路,先比较个位,在比较十位。。。

超过10次找不到就输出-1.多谢!

另外,假设k为30,int存不下的,同学你想的太简单了,呵呵


[fly]存在即是合理[/fly]
2012-12-29 13:49
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
回复 5楼 czz5242199
至少和示例一致啊,我忽略了什么东东?
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void Mul(char *a, char *b, char *c, int k)
{    //求a*b后k位值,放入c中,均逆序
    int Result, i, j;
    int a_len = strlen(a);
    int b_len = strlen(b);

    for (i = 0;i <= k;c[i++] = '\0');

    for (i = 0;i < a_len && i < k;++i)
    for (j = 0;j < b_len && i+j < k;++j)
    {
        Result = (a[i]-'0') * (b[j]-'0') + c[i+j];
        c[i+j] = Result % 10;
        c[i+j+1] += Result / 10;
    }
    for (i = 0;i < k;c[i++] += '0');c[i] = '\0';
}
int Get(char *nn, int k)
{    //别的函数没问题,就是这个。。。
    //我忽略了什么???
    int mul = 1, i, j;
    char temp[101], result[101];
    strcpy(temp, nn);

    for (i = 0;i < k;++i)
    {
        Mul(nn, temp, result, k);
        for (j = 1;nn[i] != result[i];++j)
        {
            if (j >= 10) return -1;
            strcpy(temp, result);
            Mul(nn, temp, result, k);
        }
        mul *= j;
    }

    return mul;
}
int fun(char *n, int k)
{    //将n后k位存入nn,并逆序
    if (strcmp(n, "1") == 0 || strcmp(n, "0") == 0)
        return 1;

    int i = 0;
    char *p, nn[101] = {0};

    for (p = n;*p;++p);
    for (--p;p >= n && i < k;nn[i++] = *p--);

    return Get(nn, k);
}
int main()
{
    int k;
    char n[101];

    while (scanf("%s%d", n, &k), n[0] != '0' && k)
        printf("%d\n", fun(n, k));

    return 0;
}


[fly]存在即是合理[/fly]
2012-12-29 22:42
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
还是AC不了,不过已经学到很多了,,错误代码贴着,有闲再研究吧
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Mul(char *a, char *b, char *c, int k)
{
    int Result, i, j;
    int a_len = strlen(a);
    int b_len = strlen(b);

    for (i = 0;i <= k;c[i++] = '\0');

    for (i = 0;i < a_len && i < k;++i)
    for (j = 0;j < b_len && i+j < k;++j)
    {
        Result = (a[i]-'0') * (b[j]-'0') + c[i+j];
        c[i+j] = Result % 10;
        c[i+j+1] += Result / 10;
    }
    for (i = 0;i < k;c[i++] += '0');c[i] = '\0';
}
void Mul1(char *a, int b)
{
    int i, j, result;
    int len = strlen(a);
    char *temp = (char *)malloc(len + 2);
    memset(temp, 0, len+2);
    for (i = len-1, j = 0;i >= 0; --i, ++j)
    {
        result = (a[i]-'0') * b + temp[j];
        temp[j] = result % 10;
        temp[j+1] = result / 10;
    }
    if (result / 10 == 0)    --j;
    for (++i;j >= 0;a[i++] = temp[j--] + '0');a[i] = '\0';
    free(temp);
}
char *Get(char *nn, int k)
{
    int i, j = 0;
    char *mul = (char *)malloc(101);strcpy(mul, "1");
    if (strcmp(nn, "1") == 0 || strcmp(nn, "0") == 0)
        {return mul;}
    char temp[101], result1[101], result2[101];
    char temp1[101], temp2[101];
    strcpy(temp, nn);
    Mul(nn, temp, result1, k);
    Mul(result1, temp, result2, k);
    for (i = 0;i < k;++i)
    {
        strcpy(temp1, temp);
        for (j = 1;result1[i] != result2[i];++j)
        {
            if (j >= 10) {free(mul);return NULL;}
            Mul(temp, temp1, temp2, k);
            strcpy(temp1, temp2);
            Mul(nn, temp1, result1, k);
            Mul(result1, temp1, result2, k);
        }
        strcpy(temp, temp1);
        Mul1(mul, j);
    }
    return mul;
}
char *fun(char *n, int k)
{
    int i = 0;
    char *p, nn[101] = {0};

    for (p = n;*p;++p);
    for (--p;p >= n && i < k;nn[i++] = *p--);

    return Get(nn, k);
}
int main()
{
    int k;
    char n[101], *p;

    while (scanf("%s%d", n, &k), n[0] != '0' && k)
    {
        p = fun(n, k);
        printf("%s\n", p ? p : "-1");
        free(p);
    }

    return 0;
}


[fly]存在即是合理[/fly]
2012-12-30 15:28
快速回复:ACM求助。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.065977 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved