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

c++加法竖式(原创)

万致远醉帥 发布于 2020-03-27 17:03, 3388 次点击
程序代码:
#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
    int a, b;
    cin >> a >> b;
    system("cls");
      std::cout << setw(12)<<a<<"\n";
      cout << setw(2 )<< "+" << setw(10) << b<<endl;
      cout << "---------\n";
          cout << setw(12) << a + b;
          while (true)
          {
              ;
          }
    return 0;
}
13 回复
#2
叶纤2020-03-27 17:10
加油
#3
lin51616782020-03-27 17:37
对齐缩进处理好点吧
#4
万致远醉帥2020-03-27 17:51
是对齐的


#5
return_02020-03-27 18:10
呵呵,加油!
#6
return_02020-03-27 18:14
可能有些ide不一样,所以显示没有对齐
#7
return_02020-03-27 18:20
有底气,可以挑战一下乘法竖式。
#8
rjsp2020-03-27 19:09
借个地方,警告一下路过的看客,C标准规定“无副效应的无限循环 属于 未定义行为”。
而且这个“副效应”不单指某个语句,而是指整个循环体。
#9
lin51616782020-03-27 20:57
以下是引用rjsp在2020-3-27 19:09:42的发言:

借个地方,警告一下路过的看客,C标准规定“无副效应的无限循环 属于 未定义行为”。
而且这个“副效应”不单指某个语句,而是指整个循环体。

我查了 ISO/IEC 9899:201x 整段附件J2 没找到这个未定义行为
能告诉我是在哪里能查到这个描述吗?
#10
叶纤2020-03-27 21:13
以下是引用lin5161678在2020-3-27 20:57:18的发言:


我查了 ISO/IEC 9899:201x 整段附件J2 没找到这个未定义行为
能告诉我是在哪里能查到这个描述吗?

如果循环在其语句或表达式的任何部分中都没有可观察到的行为(I / O,易失性访问,原子或同步操作),则具有无限循环的程序具有未定义的行为。这使编译器可以优化所有无法观察到的循环,而无需证明它们会终止。唯一的例外是表达式为常量表达式的循环 。while(true)永远是一个无休止的循环。

与所有其他选择和迭代语句一样,while语句建立块作用域:表达式中引入的任何标识符在语句之后超出作用域。

(从C99开始)
#11
return_02020-03-27 21:17
#12
叶纤2020-03-27 21:20
我的是英文版翻译来的有些翻译有错误哈https://en.
在 C language Statements里面查
#13
wmf20142020-03-27 22:14
反正闲着无聊,给你们把乘法竖式做了:
程序代码:
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
string add(string a, string b)
{
    int i=a.length (), j=0, k=b.length ();
    string c="";
    while (i || j || k)
    {
        if (i)
        {
            j = j + a[i - 1] - '0';
            i--;
        }
        if (k)
        {
            j = j + b[k - 1] - '0';
            k--;
        }
        c = (char)(j % 10 + '0') + c;
        j /= 10;
    }
    return c;
}
string mult(string a, int b)
{
    int i, j=0;
    string c="";
    for (i = a.length(); i; i--)
    {
        j = b * (a[i - 1] - '0') + j;
        c = (char)(j % 10 + '0')+c;
        j /= 10;
    }
    if (j)c = char(j + '0') + c;
    return c;
}
int main()
{
    string a, b, c, d;
    int i, j, l;
    cin >> a >> b;
    l = a.length() + b.length() + 1;
    cout << setw(l) << a << endl << "*" << setw(l -  1) << b << endl;
    for (i = 0; i < l; i++)cout << "-";
    cout << endl;
    for (i = b.length(); i; i--)
    {
        d = mult(a, (int)(b[i - 1] - '0'));
        cout << setw(l + i - b.length()) << d << endl;
        for (j = 0; j < b.length() - i; j++)d = d + '0';
        c = add(c, d);
    }
    for (i = 0; i < l; i++)cout << "-";
    cout << endl << setw(l) << c << endl;
    return 0;
}


运行结果:123456789×98765
      123456789
*         98765
---------------
      617283945
     740740734
    864197523
   987654312
 1111111101
---------------
 12193209765585
#14
阳光宝宝2022-04-11 11:46
刚学C++,改一下:
程序代码:

#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
    int a, b;
    cout <<"请输入一个数回车后再输入一个数:\n";
    cin >> a >> b;
    system("cls");
      cout <<a<<"+"<<b<<"的竖式计算过程如下:\n\n";
      
      std::cout << setw(10)<<a<<"\n";
      cout << setw(2 )<< "+" << setw(8) << b<<endl;
      cout << "-----------\n";
          cout << setw(10) << a + b;
          while (true)
          {
              ;
          }
    return 0;
}
1