| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 603 人关注过本帖
标题:大整数版A+B问题
只看楼主 加入收藏
maying
Rank: 2
等 级:论坛游民
帖 子:3
专家分:18
注 册:2009-7-26
收藏
 问题点数:0 回复次数:2 
大整数版A+B问题
问题是:输入两个大整数,其位数范围为10-500,输出其和。
我的想法是将这两个数分别用一个字符数组来表示,然后将两个数组内的数对应相加,若相加后大于9则除以10取余并将该位数的前一位加一,最后输出,但结果始终不对,希望可以有人指点一下,谢谢!
#include<stdio.h>
#include<string.h>

int main(void)
{
    char a[500],b[500],c[1001],d[1001];
    int i,j,t,k;
    while(scanf("%s%s",a,b)==2)
    {
        if(strlen(a)>strlen(b))
        {
            t=strlen(a)-strlen(b);
            for(i=strlen(a)-1;i>t-1;i--)
            {
                j=strlen(b)-1;
                c[i]=a[i]+b[j];
                if(c[i]>9)
                {
                    c[i]=c[i]%10;
                    a[i-1]+=1;
                }
                j--;
            }
            k=strlen(a)-1;
                for(j=0;j<k;j++)
                {
                    printf("%d",c[j]);
                }
        }
            else if(strlen(a)<strlen(b))
            {
            t=strlen(b)-strlen(a);
            for(i=strlen(b)-1;i>t-1;i--)
            {
                j=strlen(a)-1;
                c[i]=a[j]+b[i];
                if(c[i]>9)
                {
                    c[i]=c[i]%10;
                    a[i-1]+=1;
                }
                j--;
            }
            k=strlen(b);
                for(j=0;j<k;j++)
                {
                    printf("%d",c[j]);
                }
            }
            else
            {
        
            for(i=strlen(a)-1;i>=0;i--)
            {
                c[i]=a[i]+b[i];
                if(c[i]>9)
                {
                    c[i]=c[i]%10;
                    a[i-1]+=1;
                }
            k=strlen(a);
                for(j=0;j<k;j++)
                {
                    printf("%d",c[j]);
                }
            }
            if(c[0]>9)
            {
                j=strlen(b);
                for(i=strlen(c)-1;i>0;i--)
                {
                    d[j]=c[i];
                    j--;
                }
                d[1]=c[0]%1;
                d[0]=1;
            k=strlen(d);
                for(j=0;j<k;j++)
                {
                    printf("%d",d[j]);
                }
            }

            }
             printf("\n");
    }
            return 0;

}
搜索更多相关主题的帖子: 整数 
2009-07-26 22:09
prankmoon
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:161
专家分:921
注 册:2009-7-21
收藏
得分:0 
大整数加法没这么简单。

你在网上搜索一本电子书,名字叫《Guide to Elliptic Curve Cryptography》,在正文的P30页有其实现思路。中文版的纸版书在这里有卖:
http://www.

[[it] 本帖最后由 prankmoon 于 2009-7-26 23:10 编辑 [/it]]
2009-07-26 23:08
mfh
Rank: 6Rank: 6
等 级:侠之大者
帖 子:179
专家分:411
注 册:2009-5-31
收藏
得分:0 
若相加后大于9则除以10取余并将该位数的前一位加一这里你的9是没有是char类型的!!!
2009-07-27 11:01
快速回复:大整数版A+B问题
数据加载中...
 
   



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

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