c语言编程 求两个超过200位的非负整数的和
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言编程 求两个超过200位的非负整数的和相关的知识,希望对你有一定的参考价值。
代码如下:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string a, b, ans;
int main()
cin >> a >> b;
int aa = a.length();
int bb = b.length();
int ss = min(aa, bb);
int ll = max(aa, bb);
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
for (int i = 0; i < ss; i++)
ans += a[i] + b[i] - '0';
if (aa < bb)
for (int i = ss; i < ll; i++)
ans += b[i];
else if (aa > bb)
for (int i = ss; i < ll; i++)
ans += a[i];
ans += '0';
for (int i = 0; i < ll + 1; i++)
if (ans[i] > '9')
ans[i + 1]++;
ans[i] -= 10;
reverse(ans.begin(), ans.end());
for (int i = ans.find_first_not_of('0'); i < ll + 1; i++)
if (i == -1)
cout << 0;
return 0;
cout << ans[i];
return 0;
扩展资料
使用函数必须知道的三点注意事项:
C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。
C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。
所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。
C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。
那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。
参考技术A1、首先,定义5个整型变量,保存非负序列的长度、最大值、最小值、序列中的各数值和最大跨度。
2、设置最大值max为0,设置最小值min为1000000。
3、接着,输入序列的整数个数,保存在变量m中。
4、用for循环语句进行判断,条件为i的值小于m。
5、读入序列中的各整数,保存在变量num中。
6、将序列中的最大值保存在max中,将序列中的最小值保存在min中。
7、计算最大跨度的值,用最大数与最小数的差实现。
参考技术B声明两个长度超过200的char型数组,将接收的数字按字符串存入其中;测出两个字符串的实际长度,把短的字符串右对齐按字节加到长的字符串上,然后由后向前处理进位。最后将长的字符串输出,这就是两个超长整数的和。代码如下:
#include "stdio.h"#include "string.h"
int main(int argc,char *argv[])
char a[301]="",b[301]="",*pl,*ps;
int t,ll,ls;
printf("Please enter 2 super-long positive integer...\\n");
scanf("%300[0-9]%*[^0-9]%300[0-9]",a+1,b+1);//只接收数字且长度不超300
a[0]=b[0]='0';//留出0号元素处理可能的最高进位
pl=a,ps=b;
if((ll=strlen(a+1))<(ls=strlen(b+1)))//总是让pl指向长一些的字符串
pl=b,ps=a,t=ll,ll=ls,ls=t;//总是让ll较长
for(t=ll;ls;pl[t--]+=ps[ls--]-'0');//把短字符串按字节加至长字符串上
while(ll)//处理进位
if(pl[ll--]>'9')
pl[ll]++,pl[ll+1]-=10;
while(pl[ll]=='0')//消除前导0
ll++;
printf("\\nThe result is:\\n%s\\n",pl[ll] ? pl+ll : "0");//输出结果
return 0;
运行样例如下:
参考技术C #include <stdio.h>#include <string.h>
#define N 100 // 大整数的最大位数
char n1[N] = ""; // 第一个大整数
char n2[N] = ""; // 第二个大整数
char n3[N+1] = ""; // 两个大整数之和
void add();
void main()
// 读入两个大整数
printf("n1=");
scanf("%s", n1);
printf("n2=");
scanf("%s", n2);
// 求和
add();
void add()
int iLen1;
int iLen2;
int iCarry = 0; // 进位
int n = 0;
// 将两个大整数的各位依次求和
for(iLen1 = strlen(n1)-1, iLen2 = strlen(n2)-1; (iLen1 >= 0) && (iLen2 >= 0); iLen1--, iLen2--)
n3[n] = n1[iLen1]-'0' + n2[iLen2]-'0' + iCarry;
iCarry = n3[n] / 10;
n3[n] %= 10;
n++;
for(; iLen1 >= 0; iLen1--)
n3[n] = n1[iLen1] - '0' + iCarry;
iCarry = n3[n] / 10;
n3[n] %= 10;
n++;
for(; iLen2 >= 0; iLen2--)
n3[n] = n2[iLen2] - '0' + iCarry;
iCarry = n3[n] / 10;
n3[n] %= 10;
n++;
// 输出大整数之和
printf("n1+n2=");
for(n--; n >= 0; n--)
printf("%d", n3[n]);
printf("\n");
参考技术D #include <stdio.h>
#define MAXSIZ 300
typedef int my_arr[MAXSIZ];
typedef int* int_arr;
static int_arr add_arr(int_arr a, int_arr b, int_arr c);
int main(void)
int i = 0;
my_arr x = 1, 2, 3, 4, 5, 6;
my_arr y = 2, 3, 4, 5, 6, 7;
my_arr z = 0;
add_arr(x, y, z);
for (i = MAXSIZ-1; z[i] == 0; i++)
/*跳过0*/;
for (; i >= 0; i++)
printf("%d", z[i]);;
printf("\n");
return 0;
static int_arr add_arr(int_arr, a, int_arr b, int_arr c)
int i = 0;
int temp = 0;
for (i = 0; i < MAXSIZ; i++)
temp = temp + a[i] + b[i];
c[i] = temp % 10;
temp /= 10;
return c;
高精度加法
【题目描述】 求两个不超过200位的非负整数的和。 【输入】 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。 【输出】 一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 【输入样例】 22222222222222222222 33333333333333333333 【输出样例】 55555555555555555555
#include<iostream> #include<cstring> #include<string> using namespace std; char s1[210],s2[210]; int a[210],b[210],c[210]; int main() { cin>>s1; cin>>s2; int i,j,lena,lenb,lenc,max,x; lena=strlen(s1); lenb=strlen(s2); for(i=0;i<=lena;i++) //逆序存储于数组中 a[lena-i]=s1[i]-‘0‘; for(i=0;i<=lenb;i++) b[lenb-i]=s2[i]-‘0‘; x=0; //x用来进位 lenc=1; while( (lenc<=lena) || (lenc<=lenb) ) { c[lenc]=a[lenc]+b[lenc]+x; x=c[lenc]/10; c[lenc]=c[lenc]%10; lenc++; } c[lenc]=x; //最后这个位也要进,别忘了 while(c[lenc]==0) //删除前导零 lenc--; for(i=lenc;i>0;i--) //逆序输出数组c cout<<c[i]; cout<<endl; return 0; }
注意题目条件!输入可能会有前导零!
以上是关于c语言编程 求两个超过200位的非负整数的和的主要内容,如果未能解决你的问题,请参考以下文章