1006.A+B Big Number
Time Limit: 2000 MS
Memory Limit: 65536 K
Total Submissions: 3857 (1138 users) Accepted: 1229 (919 users)
[ My Solution ]
Total Submissions: 3857 (1138 users) Accepted: 1229 (919 users)
[ My Solution ]
Description
Calculate a+b
Input
Two integer a,b (0<=a,b<=101000)
Output
Output a + b
Sample Input
5 7
Sample Output
12
Source
xmu
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*
1,将输入转化为char数组;
2,char数组转为整型数组;
3,整型数组着位相加。
*/
//将字符串数组转为整型数组
int* char2Int(char* a)
{
//printf("%s",a);
int aLen=strlen(a);
int* ret;
ret=(int*)malloc(sizeof(int)*1024);
memset(ret,0,1024);
int retIndex=0;
for(int aIndex=aLen;aIndex!=0;aIndex--)
{
ret[retIndex++]=a[aIndex-1]-'0';
//printf("%d",ret[retIndex-1]);
}
return ret;
}
int main()
{
char a[1024],b[1024];
int ret[2048];
scanf("%s %s",a,b);
int aLen = strlen(a);
int bLen = strlen(b);
int retSize = (aLen>bLen?aLen:bLen)-1;
int* aInt;
int* bInt;
aInt = char2Int(a);
bInt = char2Int(b);
int e=0;
//将两数组着位相加.
for(int i=0;i<=retSize;i++)
{
int temp;
temp=aInt[i]+bInt[i]+e;
ret[i] = temp%10;
e = temp/10;
}
//最后进位处理.
if(e!=0)
{
retSize++;
ret[retSize]=e;
}
for(int i=retSize;i>=0;i--)
{
printf("%d",ret[i]);
}
free(aInt);
free(bInt);
return 0;
}