| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2751 人关注过本帖
标题:大整数加法
只看楼主 加入收藏
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
结帖率:92.86%
收藏
已结贴  问题点数:5 回复次数:10 
大整数加法
问题描述

求两个不超过 200 位的非负整数的和。

输入

有两行,每行是一个不超过 200 位的非负整数,没有多余的前导 0。

输出

一行,即相加后的结果。结果里不能有多余的前导 0,即如果结果是 342,那么就不能输出为 0342。

输入样例

22222222222222222222
33333333333333333333

输出样例

55555555555555555555



用数组行吗?
搜索更多相关主题的帖子: 整数 加法 
2009-11-05 17:00
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
可以啊
2009-11-05 17:15
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
大数相加一般都用数组解决···LZ继续加油···等你的好消息···
2009-11-05 17:16
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:2 
#include "stdio.h"
main()
{
    char s[200],t[200],c[200];
    int len1,len2,i,temp;
    printf("please input two large numbers:\n");
    gets(s);
    gets(t);
    len1=strlen(s);
    len2=strlen(t);
    if(len1<len2)
    {
        strcpy(c,s);
        strcpy(s,t);
        strcpy(t,c);
        len1=strlen(s);
         len2=strlen(t);
    }
    strcpy(c,s);
    for(i=0;i<len2;i++)
        c[i+len1-len2]=s[i+len1-len2]+t[i]-'0';
    for(i=len1-1;i>=0;i--)
         if(c[i]>=58)
        {            
            c[i]-=10;
            c[i-1]++;
        }
     puts(c);
}
自己写了个,但是不完善。因为它不适合于最高位进位的加法,自己再完善一下吧,可以看看思路。
2009-11-05 17:53
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
收藏
得分:0 
好,我先琢磨琢磨!谢了

学无止境!
2009-11-05 19:16
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
收藏
得分:0 
哎,4楼的大侠,能不能简单一点啊。有点复杂啊。

学无止境!
2009-11-06 11:21
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:2 
#include<stdio.h>
#include<string.h>
void inv(char str[], int n)
{
    int i, j;  char temp;
    for(i=0, j=n-i-1; i<j; i++, j--)
        temp=str[i], str[i]=str[j], str[j]=temp;
}
        
int main()
{
    int i, j=0, n, m=0, len1, len2;
    char str1[1001], str2[1001];
    scanf("%d\n",&n);m=n;
    while(n--)
    {

        scanf("%s%s",str1,str2);
        printf("Case %d:\n%s + %s = ",++j,str1,str2);
        len1=strlen(str1);
        len2=strlen(str2);
        inv(str1, len1);
        inv(str2, len2);
        if(len1<=len2)
        {
            for(i=0; i<len1; i++)
            {
                str2[i]+=str1[i]-'0';
                if(str2[i]>'9' && i<len2-1)
                    str2[i]-=10, str2[i+1]++;

            }
            if(str2[len2-1]>'9')
                str2[len2-1]-=10, str2[len2]='1', str2[len2+1]='\0';
            inv(str2, strlen(str2));
            printf("%s\n",str2);
        }
        else
        {
            for(i=0; i<len2; i++)
            {
                str1[i]+=str2[i]-'0';
                if(str1[i]>'9')
                    str1[i]-=10, str1[i+1]++;
            }
            inv(str1, strlen(str1));
            printf("%s\n",str1);
        }
        if(n>0)
            printf("\n");
   
    }
    return 0;
}
2009-11-06 11:34
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
收藏
得分:0 
哥说:我要研究一下。。。。。。。。。。。。。

学无止境!
2009-11-06 11:37
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:1 
其实就是用字符串来模拟数的相加,先判定输入的数的位数,对齐后个位相加(注意ASCII码的变化),然后要进位的进位就行了··懂了后就完善下自己写的代码咯···可以是负数,有小数···加油···
2009-11-06 12:25
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
收藏
得分:0 
哦,谢了!

学无止境!
2009-11-06 14:33
快速回复:大整数加法
数据加载中...
 
   



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

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