题目1198:a+b(九度OJ)

来源:互联网 发布:js中跳转到另一个页面 编辑:程序博客网 时间:2024/05/29 09:04
题目1198:a+b

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:9007

解决:3130

题目描述:

实现一个加法器,使其能够输出a+b的值。

输入:

输入包括两个数a和b,其中a和b的位数不超过1000位。

输出:

可能有多组测试数据,对于每组数据,
输出a+b的值。

样例输入:
2 610000000000000000000 10000000000000000000000000000000
样例输出:
810000000000010000000000000000000
来源:
2010年华中科技大学计算机研究生机试真题

代码:这是一个典型的大数运算加法实现

C代码:

#include "stdio.h"
#include "math.h"
#include "string.h"
#define max 1001
#define Max 2002
void add(char a[],char b[],intlen)                  //加法实现函数
{
   intc[Max],i=0,j=0,k;                                    //此处用int类型的c[Max]来存储结果
   for(j=0;j
   {
      c[j]=0;
   }
   for(i=0;i
   {
      c[i]+=a[i]-48+b[i]-48;                                             //'0'的ascll码是48
      if(c[i]>=10)
      {
          c[i]-=10;
          c[i+1]+=1;
      }
   }
   if(c[len]!=0)
    len++;
   for(k=len-1;k>=0;k--)
   {
      printf("%d",c[k]);
   }
   printf("\n");
}
int main()
{
    chara[max],b[max],a1[max],b1[max];                                //以char类型的数组来保存输入
   while(scanf("%s%s",&a,&b)!=EOF)
    {
       int len;
       int len1=strlen(a);
       int len2=strlen(b);
       int i,j,k=0,g=0;
       for(i=len1-1;i>=0;i--)
       {
           a1[k++]=a[i];
       }
       for(k;k<1001;k++)
       {
           a1[k]='0';
       }
       for(j=len2-1;j>=0;j--)
       {
           b1[g++]=b[j];
       }
       for(g;g<1001;g++)
       {
           b1[g]='0';
       }
       len=len1>len2?len1:len2;
       add(a1,b1,len);
    }

}
0-9的ascll码对照:

                                二进制                                                    十进制                   十六进制               字符

0011 0000483000011 0001493110011 0010503220011 0011513330011 0100523440011 0101533550011 0110543660011 0111553770011 1000563880011 100157399

 

0 0
原创粉丝点击