问题描述:A+B
计算两个非负整数 A,B 的和。不过这一次有些特殊,A,B 可能会很大。
输入格式
第一行输入一个非负整数 A。
第二行输入一个非负整数 B。
A,B 的长度不大于 500。
输出格式
输出 A+B的值。不要有多余的前导零。
样例输入
123
1234
样例输出
1357
详细代码:
[cpp] view plain copy
- #include <bits/stdc++.h>
- using namespace std;
- int main(){
- //利用栈
- stack<int> a1;
- stack<int> a2;
- stack<int> a3;
- //字符串形式及长度
- string str1,str2;
- int len1,len2;
- //初始化
- cin>>str1>>str2;
- len1=str1.length();
- len2=str2.length();
- //调整
- if(len1<len2){
- str1.swap(str2);
- swap(len1,len2);
- }
- //入栈 a1,a2 (复杂形式)
- int x=len1-len2;
- for(int i=0;i<x;i++)a2.push(0);
- for(int i=0;i<len1;i++)a1.push(str1[i]-'0');//数字字符入栈
- for(int i=0;i<len2;i++)a2.push(str2[i]-'0');
- //计算+入栈 a3
- int mod=0;
- for(int i=0;i<len1;i++){
- int sum=a1.top()+a2.top()+mod;
- a1.pop();a2.pop();
- a3.push(sum%10);
- mod=sum/10;
- }
- //判断进一
- if(mod)a3.push(mod),len1++;
- for(int i=0;i<len1;i++){
- cout<<a3.top();
- a3.pop();
- }
- return 0;
- }
\
\
问题描述:A×B
计算两个非负整数 A,B 的乘积,A,B可能会很大。
输入格式
第一行输入一个非负整数A。
第二行输入一个非负整数 B。
A,B 的长度不大于 500。
输出格式
输出 A×B 的值。
样例输入
4321
1234
样例输出
5332114
\
代码解析:
[cpp] view plain copy
- #include <bits/stdc++.h>
- using namespace std;
- int main(){
- char str1[666],str2[666];//存放输入数字字符,分别为第一个乘数和第二个乘数
- int a1[666],a2[666];//对字符串倒置并依次存放每个字节
- int ans[1001]={0};//存放结果,初始为0
- int mod;//可以算是商
- int len1,len2,len3;
- //
- cin>>str1>>str2;
- //
- len1=strlen(str1);
- len2=strlen(str2);
- //
- for(int i=0;i<len1;i++){
- a1[len1-i]=str1[i]-'0';
- }
- for(int i=0;i<len2;i++){
- a2[len2-i]=str2[i]-'0';
- }
- //运算
- for(int i=1;i<=len1;i++){
- mod=0;
- for(int j=1;j<=len2;j++){
- ans[i+j-1]=a1[i]*a2[j]+mod+ans[i+j-1];
- mod=ans[i+j-1]/10;//商
- ans[i+j-1]=ans[i+j-1]%10;//模
- }
- ans[i+len2]=mod;//一次乘积后至多会多出来一位
- }
- len3=len1+len2;
- while(ans[len3]==0&&len3>1)
- len3--;
- for(int i=len3;i>0;i--){
- cout<<ans[i];
- }
- return 0;
- }