C\大数相加
请问大数相加(位数不确定)如何写程序,我想的是用数组或动态存储,但是不知道怎么存和怎么输出。 就存在字符串里吧,然后模拟加法,进位什么的。我也去试试哦。 本帖最后由 砚堂_ 于 2018-11-12 20:37 编辑可以做到,就是有点繁琐。贴上C++的代码(只是用C++做了输入输出,别的部分和C语言是相通的)
这段代码只能进行正整数的相加,没有考虑小数,也没有考虑负数的情况。
#include "pch.h"
#include <iostream>
using namespace std;
const int MAX = 100;
int main()
{
cout << "大整数相加" << endl;
cout << "请输入第一个整数:" << endl;
char* a = new char {0};
cin >> a;
cout << "请输入第二个整数:" << endl;
char* b = new char {0};
cin >> b;
char* c = new char {0};
//核心代码
int m = 0, n = 0; //位数
while (a) m++;
while (b) n++;
int r = m > n ? m + 1 : n + 1; //结果最多比原数据多1位
int carry = 0; //加法进位
m--, n--, r--;//数组下标从0开始
while (m >= 0 && n >= 0)
{
c = a + b - '0'*2 + carry;
carry = c / 10;//进位
c = c%10+'0'; //本位
r--;
}
while (m >= 0)
{
c = a -'0' + carry;
carry = c / 10;
c = c % 10 + '0';
r--;
}
while (n >= 0)
{
c = a -'0' + carry;
carry = c / 10;
c = c % 10 + '0';
r--;
}
char* result;
if (carry == 1)
{
c = 1+'0';
result = c;
}
else
{
result = &c;
}
cout << r;
cout << "结果是:" << endl;
cout << result << endl;
getchar();
delete a;
delete b;
delete c;
return 0;
}
谢谢,我也是想到c++的输入输出可能容易一些,但是用C是可以输入输出的吗? lemon3 发表于 2018-11-12 22:52
谢谢,我也是想到c++的输入输出可能容易一些,但是用C是可以输入输出的吗?
你把核心代码前后的改掉不就行了
测测有没有问题吧,然后标为已解决吧 lemon3 发表于 2018-11-12 22:52
谢谢,我也是想到c++的输入输出可能容易一些,但是用C是可以输入输出的吗?
当然可以啊。我不用printf函数是因为我编译器老是警告不安全,我懒得调...
另外第4行的常量定义好像也是C++的特性,可以改成#define MAX 100 抱歉,我在网上看了一些配置,找到了pch的一些东西,没找到最后一步怎么做,我的visual里面无法识别pch.
https://blog.csdn.net/Acheld/article/details/52693646?utm_source=blogxgwz6
页:
[1]