一道c++不会,谁告诉我
加法的横式与竖式运算式子 输入A,B二个变量的值,分别打印出A与B加法的横式与竖式运算式子。(横线长度为7,数字右对齐)
样例输入:
45 237
样例输出:
45+237=282
45
+ 237
-------
282
时间限制:
1000
空间限制:
65536
程序代码:
#include<bits/stdc++.h> //c++oi用万能库
using namespace std;
#define len 7 //我不是很看懂你的意思,反正整个len为了对齐7位数,想长的话自己变大(QWQ别太大)
int main()
{
string a1,b1;
//嗯,用高精
cin>>a1;//输入第一个数
cin>>b1;//第二个
int a[10000],b[10000],c[10000];
int x=0;//进位数
memset(a,0,sizeof(a));//初始化,0
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
cout<<setw(len)<<a1<<endl;
cout<<"+"<<setw(len-1)<<b1<<endl;
cout<<"-------"<<endl;
//转int数组
for(int i=0;i<a1.length();i++)
{
a[i]=a1[a1.length()-1-i]-'0';
}
for(int i=0;i<b1.length();i++)
{
b[i]=b1[b1.length()-1-i]-'0';
}
//数组下标数相同的加起来,进位的话把1放到x中
for(int i=0;i<=a1.length()||i<=b1.length();i++)
{
c[i]=b[i]+a[i]+x;
x=0;
if(c[i]>=10)
{
c[i]%=10;
x=1;
}
}
long maxl=max(a1.length(),b1.length());
if(c[maxl]==0)maxl--;//去掉前面多余的0
int blankl=len-maxl-1;
while(blankl>0) //就是为了对齐
{
cout<<" ";
blankl--;
}
for(int i=maxl;i>=0;i--)
cout<<c[i];
}