大数加法
时间限制(普通/Java) :
1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 2971 测试通过 : 775
总提交 : 2971 测试通过 : 775
比赛描述
求两个非负整数(1000位以内)的和。
输入
两个非负整数(1000位以内),以空格分隔。
输出
两个非负整数的和。
样例输入
111111111111 222222222222
样例输出
333333333333
提示
题目来源
GUOJ
基础的string操作
string的这个构造函数
string s(n,'c') 把s初始化为由连续n个字符c组成的串
还挺好用的,赞~\(≧▽≦)/~
#include<iostream>
#include<string>
using namespace std;
int main()
{
string string1,string2;
int string3_len,string2_len,string1_len;
cin >> string1 >> string2;
string1_len = string1.length();
string2_len = string2.length();
if(string1.length()>=string2.length())
string3_len = string1.length();
else
string3_len = string2.length();
string string3(string3_len,'0'); //初始化 string3 把string3初始化为由连续string3_len个字符0组成的串
int string3_index = string3_len-1;
int string2_index = string2_len-1;
int string1_index = string1_len-1;
int jinwei=0;
while(string1_index >=0 && string2_index>=0)
{
string3[string3_index] = string1[string1_index--] + string2[string2_index--] - 48 + jinwei;
jinwei=0;
if(string3[string3_index]>'9')
{
string3[string3_index]-=10;
jinwei = 1;
}
string3_index--;
}
while(string1_index>=0) //收尾操作1
{
string3[string3_index] = string1[string1_index--] +jinwei ;
jinwei = 0;
if(string3[string3_index]>'9')
{
string3[string3_index]-=10;
jinwei = 1;
}
string3_index--;
}
while(string2_index>=0) //收尾操作2
{
string3[string3_index] = string2[string2_index--] +jinwei ;
jinwei = 0;
if(string3[string3_index]>'9')
{
string3[string3_index]-=10;
jinwei = 1;
}
string3_index--;
}
if(jinwei == 1)
cout << jinwei;
cout << string3 ;
}
然后又写了一个同样思路的C语言版本
#include<stdio.h>
#include<string.h>
int main()
{
char s1[1000],s2[1000],s3[1000];
int s1_len,s2_len,s3_len,i;
int string3_index = s3_len-1;
int string2_index = s2_len-1;
int string1_index = s1_len-1;
int jinwei=0;
scanf("%s %s",s1,s2);
// printf("%s %s",s1,s2);
s1_len = strlen(s1);
s2_len = strlen(s2);
s3_len = (s1_len>=s2_len)?s1_len:s2_len;
for(i=0;i<s3_len;i++)
s3[i]='0';
s3[i]='\0';
// printf("%s %s\n%s",s1,s2,s3);
string3_index = s3_len-1;
string2_index = s2_len-1;
string1_index = s1_len-1;
jinwei=0;
while(string1_index >=0 && string2_index>=0)
{
s3[string3_index] = s1[string1_index--] + s2[string2_index--] - 48 + jinwei;
jinwei=0;
if(s3[string3_index]>'9')
{
s3[string3_index]-=10;
jinwei = 1;
}
string3_index--;
}
while(string1_index>=0) //收尾操作1
{
s3[string3_index] = s1[string1_index--] +jinwei ;
jinwei = 0;
if(s3[string3_index]>'9')
{
s3[string3_index]-=10;
jinwei = 1;
}
string3_index--;
}
while(string2_index>=0) //收尾操作2
{
s3[string3_index] = s2[string2_index--] +jinwei ;
jinwei = 0;
if(s3[string3_index]>'9')
{
s3[string3_index]-=10;
jinwei = 1;
}
string3_index--;
}
if(jinwei == 1)
printf("%d",jinwei);
puts(s3 ) ;
return 0;
}