A+B 进阶版
Description
输入为两个整数 A B请输出A+B
Input
两个数字以空格分割,如1234567 1111111
Output
输入的两个数的和
Sample Input 1 :1234567 1111111
Sample Output 1:2345678
以下是我的代码
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<string.h>
using namespace std;
int main(){
char num1[1000];
char num2[1000];
char num[1000];
int m,n;
cin>>num1;
cin>>num2;
m=strlen(num1);
n=strlen(num2);
int i,j;
i=m;
j=n;
int k=0;
while(i>0||j>0){
int s1=0,s2=0;
int flag=0;
s1=num1[i-1]-48;
s2=num2[j-1]-48;
i--;
j--;
if(s1+s2<9){
if(flag==0){
num[k]=(char)(s1+s2);
}
else{
s1+s2+1>9?flag=1:flag=0;
cout<<flag;
if(flag==0)
num[k]=(char)(s2+s1+1);
else{
num[k]=(char)((s1+s2+1)%10);
flag=1;
}
}
k++;
}
else{
num[k]=(char)((s1+s2)%10);
flag=1;
k++;
}
}
cout<<k;
for(int q=k;q>=0;q--){
cout<<num[q];
}
}
while(i>0||j>0)
s1=num1[i-1]-48;
s2=num2[j-1]-48;
如果两个数位数不相等,比如i比j大,那i==0的时候,j>0,进入循环, s1=num1[i-1]-48坐标就是-1了
s1=num1[i-1]-48;
s2=num2[j-1]-48;
这里为什么要-48?
哦哦,突然明白了
数字0的ASCII码是48
想把char 类型数组里的转化为数字
不知到怎么转化位数字
我把while循环的条件||改成了&&,但是程序结果是一个数字加一堆框
求解答
循环结束后,位数多的那个数剩下的数字你要补上去
而且num[k]是没有值的
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<string.h>
using namespace std;
int main(){
char num1[1000];
char num2[1000];
char num[1000];
int m,n;
cin>>num1;
cin>>num2;
m=strlen(num1);
n=strlen(num2);
int i,k=0,sum=0,big;//i用来循环,k是进位,sum用来记录每一位对应相加的结果,big取最长的、用来最后for输出
if(m>=n){
big=m;
for(i=m-1;i>=0;i--){//从最低位到最高位依次相加
if(i<m-n){//由于两组长度可能不同,这里就要判断,短的走完了就不能再取
sum = (num1[i] - '0') + k;//数组是char类型,需要ASCII码相减得出对应的数字
}else{
sum = (num1[i] - '0') + (num2[i-m+n] - '0') + k;
}
num[i] = sum%10 + '0';//加'0'转换成数字对应的ASCII
k= sum/10;//进位
}
}else{
big=n;
for(i=n-1;i>=0;i--){
if(i<n-m){
sum = (num2[i] - '0') + k;
}else{
sum = (num1[i-n+m] - '0') + (num2[i] - '0') + k;
}
num[i] = sum%10 + '0';
k= sum/10;//进位
}
}
if(k>0){//最高位可能会有进位
cout << k;
}
for(i=0;i<big;i++){
cout << num[i];
}
}