两个15位的正整数相加
【问题描述】能使用数组的方式对两个15位的正整数相加,并将结果显示出来。
提示:请将每一位数存放在一个数组元素中,然后逐位相加。
【输入形式】
输入两个15位的正整数,每个整数占一行。
【输出形式】
结果显示在下一行
【样例输入】
123456789012345
234567890123456
【样例输出】
358024679135801
#include <stdio.h>
#include <string.h>
inline int addchar(char c1,char c2,int f,char &s){//1位加法,f表示进位
int t=c1+c2+f;
if(t<106){
s=(char)(t-48);
return 0;
}else{
s=(char)(t-58);
return 1;
}
}
void bignumadd(const char* num1,const char* num2,char* sum){//大数相加
size_t len1=strlen(num1),len2=strlen(num2),i=0;//得到输入字符串长度
int f=0;//用于保存进位
if(len1>len2){//如果第一个字符串长
for(;i<len2;++i){//len2比较小,先遍历完
f=addchar(num1[len1-i-1],num2[len2-i-1],f,sum[i]);
}
for(;i<len1;++i){//剩下部分
f=addchar(num1[len1-i-1],'0',f,sum[i]);//第一个字符串多出来的直接和0加
}
}else{//如果第二个字符串长
for(;i<len1;++i){//len1比较小,先遍历完
f=addchar(num1[len1-i-1],num2[len2-i-1],f,sum[i]);
}
for(;i<len2;++i){//剩下部分
f=addchar('0',num2[len2-i-1],f,sum[i]);//第二个字符串多出来的直接和0加
}
}
//别忘记最高位还可能会进位
for(;f>0;++i){
f=addchar('0','0',f,sum[i]);
}
}
void showsum(const char* s){//显示计算结果
size_t len=strlen(s);
for(int i=len-1;i>-1;--i){//从最后一位开始逆序输出
putchar(s[i]);
}
}
int main() {
const char* num1="123456789012345";
const char* num2="234567890123456";
char s[100]={0};//分配100字节的栈空间存放结果
//printf(" %s+%s\n=",num1,num2);
bignumadd(num1,num2,s);
showsum(s);
//getchar();
return 0;
}
100位以内相加都可以
#include<iostream>
using namespace std;
void fun1(char a1[],int a2[]);
void fun2(char b1 [],int b2[]);
void jinweiqiuhe(int a2[],int b2[],int c[],char a1[],char b1[]);
void fuzhi(int c[],int d[]);
int main()
{
char a1[101],b1[101];
int a2[101]={0}, b2[101]={0}, c[101]={0},d[101];
int i;
for(i = 0; i < 101; i++)
{
a1[i] = '*';
b1[i] = '*';
}
cin >> a1 >> b1;
fun1(a1,a2);
fun2(b1,b2);
jinweiqiuhe( a2, b2, c,a1,b1);
fuzhi( c, d);
for(int i = 0;d[i]!=10;i++ )
cout<<d[i];
}
void fun1(char a1[],int a2[])
{
int i,j;
for( i = 0; a1[i] != '*'; i++)
{
for( j = 0; j <= i; j++)
{
a2[101-i+j] = a1[j]-'0';
}
}
}
void fun2(char b1 [],int b2[])
{
int i, j;
for( i = 0; b1[i] != '*'; i++)
{
for( j = 0; j <= i; j++)
{
b2[101-i+j] = b1[j]-'0';
}
}
}
void jinweiqiuhe(int a2[],int b2[],int c[],char a1[],char b1[])
{
int k,j=0;
for(int i=100; a1[j]!='*'||b1[j]!='*'; i--)
{
c[i] += a2[i] + b2[i];
k = c[i];
if(c[i]>9)
{
c[i] = k % 10;
c[i - 1] = k / 10;
}
j++;
}
}
void fuzhi(int c[],int d[])
{
int i, j=0;
for(i = 0; c[i]==0;i++);
for(;i<= 100;i++)
{
d[j]=c[i];
j++;
}
d[j]=10;
}
}