PAT1074宇宙無敵加法器 複製段 漏改的錯誤

NO IMAGE
1074 宇宙無敵加法器(20 分)提問
地球人習慣使用十進位制數,並且預設一個數字的每一位都是十進位制的。而在 PAT 星人開掛的世界裡,每個數字的每一位都是不同進位制的,這種神奇的數字稱為“PAT數”。每個 PAT 星人都必須熟記各位數字的進製表,例如“……0527”就表示最低位是 7 進位制數、第 2 位是 2 進位制數、第 3 位是 5 進位制數、第 4 位是 10 進位制數,等等。每一位的進位制 d 或者是 0(表示十進位制)、或者是 [2,9] 區間內的整數。理論上這個進製表應該包含無窮多位數字,但從實際應用出發,PAT 星人通常只需要記住前 20 位就夠用了,以後各位預設為 10 進位制。
在這樣的數字系統中,即使是簡單的加法運算也變得不簡單。例如對應進製表“0527”,該如何計算“6203   415”呢?我們得首先計算最低位:3   5 = 8;因為最低位是 7 進位制的,所以我們得到 1 和 1 個進位。第 2 位是:0   1   1(進位)= 2;因為此位是 2 進位制的,所以我們得到 0 和 1 個進位。第 3 位是:2   4   1(進位)= 7;因為此位是 5 進位制的,所以我們得到 2 和 1 個進位。第 4 位是:6   1(進位)= 7;因為此位是 10 進位制的,所以我們就得到 7。最後我們得到:6203   415 = 7201。
輸入格式:
輸入首先在第一行給出一個 N 位的進製表(0 < N ≤ 20),以回車結束。 隨後兩行,每行給出一個不超過 N 位的非負的 PAT 數。
輸出格式:
在一行中輸出兩個 PAT 數之和。
輸入樣例:
30527
06203
415
輸出樣例:
7201
  • 一直沒發現錯誤 在while(j>=0)裡面複製的while(i>=0), i 沒改成 j !!!!!!!!!!
  • 還有一個,輸入非負的PAT數,即可能0 0 特判輸出0
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s[25],a[25],b[25],c[25];
int main()
{
scanf("%s\n%s\n%s",&s,&a,&b);
int la=strlen(a);
int lb=strlen(b);
int ls=strlen(s);
int h,mod,t=0,i,j,k,q;
for(i=la-1,j=lb-1,k=ls 1,q=ls-1;i>=0&&j>=0;i--,j--,k--,q--)
{
h=a[i]-'0' b[j]-'0' t;
mod=(s[q]=='0'?10:(s[q]-'0'));
c[k]=h%mod '0';
t=h/mod;
}
while(i>=0)
{
h=a[i]-'0' t;
mod=(s[q]=='0'?10:(s[q]-'0'));
c[k]=h%mod '0';
t=h/mod;
i--;k--;q--;
}
while(j>=0)
{
h=b[j]-'0' t;
mod=(s[q]=='0'?10:(s[q]-'0'));
c[k]=h%mod '0';
t=h/mod;
j--;k--;q--;
}
while(t>0)
{
if(q>=0)
mod=(s[q]=='0'?10:(s[q--]-'0'));
else
mod=10;
c[k]=t%mod '0';
t=t/mod;
k--;
}
k  ;
while(c[k]=='0')k  ;
printf("%s\n",k>ls 1?"0":c k);
return 0;
}