题目1198:a+b
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:9007
解决:3130
题目描述:
-
实现一个加法器,使其能够输出a+b的值。
输入:
-
输入包括两个数a和b,其中a和b的位数不超过1000位。
输出:
-
可能有多组测试数据,对于每组数据,
输出a+b的值。
样例输入:
-
2 6
10000000000000000000 10000000000000000000000000000000
样例输出:
-
8
10000000000010000000000000000000
来源:
-
2010年华中科技大学计算机研究生机试真题
代码:这是一个典型的大数运算加法实现
C代码:
#include "stdio.h"
#include "math.h"
#include "string.h"
#define max 1001
#define Max 2002
void add(char a[],char b[],int len) //加法实现函数
{
int c[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()
{
char a[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 0000 | 48 | 30 | 0 |
0011 0001 | 49 | 31 | 1 |
0011 0010 | 50 | 32 | 2 |
0011 0011 | 51 | 33 | 3 |
0011 0100 | 52 | 34 | 4 |
0011 0101 | 53 | 35 | 5 |
0011 0110 | 54 | 36 | 6 |
0011 0111 | 55 | 37 | 7 |
0011 1000 | 56 | 38 | 8 |
0011 1001 | 57 | 39 | 9 |