1)大正整数的加法
具体思路就是模仿手算的加法,我在这里先将输入的字符串reverse便于操作,最后去掉结果的前置0即可。注意:如果答案就是0,那么需要特殊处理。
大量的测试数据可以 上交至hdu 1002
- #include<iostream>
- #include<string>
- #include<algorithm>
- using namespace std;
- int main()
- {
- int n;
- cin>>n;
- int m=0;
- int l=0;
- for(int i=1;i<=n;i++)
- {
- string s1,s2,s(10000,'0');
- cin>>s1>>s2;
- m++;
- cout<<(l++?"\n":"");
- reverse(s1.begin(),s1.end());
- reverse(s2.begin(),s2.end());
- for(int j=0;j<s1.length();j++)
- s[j]=s1[j];
- int temp=0;
- for(int k=0;k<s2.length();k++)
- {
- temp+=s[k]-48+s2[k]-48;
- s[k]=temp%10+'0';
- temp/=10;
- }
- s[s2.length()]=s[s2.length()]-48+temp+48;
- reverse(s.begin(),s.end());
- reverse(s1.begin(),s1.end());
- reverse(s2.begin(),s2.end());
- cout<<"Case "<<m<<":"<<endl;
- cout<<s1<<" + "<<s2<<" = "<<s.substr(s.find_first_not_of('0'))<<endl;
- }
- return 0;
- }
(2)大正整数的减法
同样是模拟手算,处理借位。用大的减去小的,最后再判断是否需要添加负号。
- #include <iostream>
- #include <string>
- #include <cstring>
- #include <vector>