用C语言编程计算两个超长正整数(长度小于100)的加法
#include
#include
void f(char* from,char* to)
{
int i,n;
n=strlen(from);
for(i=0;i<n;i++)
to[n-1-i]=from[i];
to[n]='\0';
}
int main(int argc, char* argv[])
{
int i;
char a[101],b[101],c[101],d='0'; //声明1001个长度的数组,就能求1000位的加法
printf("enter two number:
");
scanf("%s",b);
scanf("%s",c);
f(b,a);
f(c,b);
for(i=0;a[i]!='\0'&&b[i]!='\0';i++)
if((a[i]+b[i]+d)%48>=10)
{
c[i]=(a[i]+b[i]+d)%48+38;
d='1';
}
else {
c[i]=(a[i]+b[i]+d)%48+48;
d='0';
}
if(a[i]!='\0')
{
for(;a[i]!='\0';i++)
if((a[i]+d)%48>=10)
{
c[i]=(a[i]+d)%48+38;
d='1';
}
else {
c[i]=(a[i]+d)%48+48;
d='0';
}
}
else if(b[i]!='\0')
{
for(;b[i]!='\0';i++)
if((b[i]+d)%48>=10)
{
c[i]=(b[i]+d)%48+38;
d='1';
}
else {
c[i]=(b[i]+d)%48+48;
d='0';
}
}
c[i]=d;
printf("sum is:
");
if(d=='0') for(i=i-1;i>=0;i--) printf("%c",c[i]);
else for(;i>=0;i--) printf("%c",c[i]);
system("pause");
return 0;
}
看到这个问题,我囧++。下面随便写了一个,有兴趣的话自己写个大整数类吧(加减乘除、幂、模、阶乘....) //大整数加法,只考虑正数
#include
#include
using namespace std;#define MAXNUM 110
int arr1[MAXNUM], arr2[MAXNUM];
string s1, s2;int main(){
int i, j;
bool bStartOutput;
cin>>s1>>s2;
j = -1;
for(i=s1.size()-1;i>=0;--i){
arr1[++j] = s1[i] - '0';
}
j = -1;
for(i=s2.size()-1;i>=0;--i){
arr2[++j] = s2[i] - '0';
}
for(i=0;i<s1.size()+s2.size()+1;++i){
arr1[i] += arr2[i];
if(arr1[i] >= 10){
arr1[i] -= 10;
++arr1[i+1];
}
}
bStartOutput = false;
for(i=s1.size()+s2.size();i>=0;--i){
if(bStartOutput != false){
cout<<arr1[i];
}else if(arr1[i] != 0){
bStartOutput = true;
cout<<arr1[i];
}
}
if(bStartOutput == false)cout<<0;
cout<<endl;
return 0;
} 输入样例
22222222222222222222
33333333333333333333
输出样例
Output Sample:
55555555555555555555
输入至多100行的文本,每行是一个至多100位的十进制无符号大整数,最后的输入行为零。要求计算出这些大整数的和,并以十进制方式显示。
示例输入:
123456789012345678901234567890
123456789012345678901234567890
123456789012345678901234567890
0
示例输出:
370370367037037036703703703670
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
const int n = 100;// 数字的最大位数
const int b = 10; // 数字的进制
char r[n+1] = {0};// 加数
char s[n+1] = {0};// 求和
while (scanf("%s", r) && strcmp(r, "0")) { // 对每一个加数...
for (int i = strlen(r)-1, j = n-1; i >= 0; i--, j--) { // 中的每一个数字位
r[i] -= '0'; // char -> int
for (int k = j, c = 0; 1; k--) { // update s
const int sum = (!c ? r[i] : 0) + s[k] + c; // local sum
if ((c = sum > b - 1)) s[k] = sum - b; // do update
else { s[k] = sum; break; } // end update
}
}
}
for (int i = 0; i < n; putchar(s[i++] + '0'));
return 0;
}
可以用字符串分割成int可以处理的整数,相加后在整合成一个长字符串输出
程序很简单,
1取串长L
2创建(L/4)取整+1 长度的数组
3将CIN得到的字符串4个一组转化为int型变量顺序存入数组
4创建(L/4)取整+1 长度的数组用来存放进位
5数字分别相加,最高位进位对应进位数组置1
6由于相加不可能进2,所以在合并之前检查每个进位位是1的前一个数组元素
对其+1并储存回原位,转化为字符串输出
希望对你有帮助,不过编这种程序花费时间才给5分。。。。实在亏啊
用C语言编程计算两个超长正整数(长度小于100)的加法
输入至多100行的文本,每行是一个至多100位的十进制无符号大整数,最后的输入行为零。要求计算出这些大整数的和,并以十进制方式显示。示例输入:123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 0 示例输出:370370367037037036703703703670 include <cstdio> include <cstring> ...
...万分感谢!从键盘输入两个超长的正整数a,b,求(a+b)和(a-b)的精确值...
c[i+1]='\\0';}
两个超长正整数相加(C语言)
} 主要想法是,判断两个数字的长短,找出最短的数字,从个位数开始与另一个数的相应位进行相加(注意判断向上进位),将结果逐个保存在结果字符串中。最后将长的那个数字 剩下的部分直接 放在结果字符串中,然后将结果字符串反转,得到结果
...题目是:请设计一个算法完成两个超长正整数的加法。谁会的帮帮忙...
由于两个个位数相加绝对不会超过18、所以最后进位的数组存成bool型也可以。首先把输入的两个字符串分别转到两个整形数组里、注意要从尾开始转、这样两个整形数组的下标就按照从0开始依次表示个十百千...的顺序来存两个数了、而且严格按位对齐。于是就可以for一遍、每个数组位相加(注意数组初始化设为0...
怎么用数组完成两个超长的正整数乘法
\/\/例如:100011 1011101\/\/程序中先输入被乘数和乘数的位数,然后动态申请空间,以字符的形式来处理长整数的每一位。\/\/模拟计算机乘法的实现,将整数乘法转换为整数加法来实现。#include <stdio.h>\/\/将数组元素左移x位,低位补0 void leftmove(char c[],int len,int x){ if(x==0)return ;else...
C语言程序设计 求一个四位数的各位数字的立方和
void main(){ long int b,c,d,e,x;printf("请输入任意一个正整数\\n");scanf("%ld",&x);b=x%10000\/1000; \/*分解出千位*\/ c=x%1000\/100; \/*分解出百位*\/ d=x%100\/10; \/*分解出十位*\/ e=x%10; \/*分解出个位*\/ printf("四位数的立方和为:%ld\\n",(b*b*b)+(c*c*c...
c语言求解。 从键盘输入一个正整数N,再输入N个整数,按从小到大的顺序...
2 2010-06-07 c语言程序:从键盘输入一非负整数n,并求出n!的值 2013-11-06 c语言编程。。。解不等式 n < 1+1\/2+1\/3+…+1... 4 2012-11-16 c语言 由键盘输入一个正整数n,求n有多少个不同的正整数因子... 1 更多类似问题 > 键盘...
C++实现超长正整数的加法,跪求修改
我觉得大整数不应该用double做为输入,应该用字符串,另外,为什么int a[N]里一个int只存放一位数字哪?这个感觉也不太好,我觉得应该可以放更大的数字。我把代码简单的调整了下:include <iostream>#include <string>#include <sstream>using namespace std;const int M = 4;const int N = 99;...
编写一个程序,实现冒泡排序,将输入的n个整数按降序进行排序,并输出...
short:修饰int,短整型数据,可省略被修饰的int。(K&R时期引入)long:修饰int,长整型数据,可省略被修饰的int。(K&R时期引入)long long:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增)signed:修饰整型数据,有符号数据类型。(C89标准新增)unsigned:修饰整型数据,无符号数据类型。(...
(c语言中)m为三位的正整数,百位,十位,个位上的数字可表示为?
1. 分析:m是一个三位数的正整数,我们可以将其百位、十位和个位数字分别表示为a3、a2和a1。2. 数学表达:a1等于m除以10的余数,a2等于m除以100的商再除以10的余数,a3等于m除以100的商。3. 程序设计:我们可以编写一个程序来实现这个转换。程序的主要部分如下:```c include int main() { int...