注册 登录
编程论坛 C++教室

一道c++不会,谁告诉我

hzr 发布于 2017-10-13 19:57, 2027 次点击
加法的横式与竖式运算式子
输入A,B二个变量的值,分别打印出A与B加法的横式与竖式运算式子。(横线长度为7,数字右对齐)

样例输入:
45  237
样例输出:
45+237=282
     45
+   237
-------
    282
时间限制:
1000
空间限制:
65536
4 回复
#2
rjsp2017-10-13 22:50
什么知识点不会?
#3
hzr2017-10-14 17:48
都不会,求答案!
#4
十三陵2017-10-29 09:08
意思我不是很懂,不知道这样是不是你的意思

程序代码:

#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];

}
#5
hzr2018-02-05 21:54
谢谢
1