c語言 急 問題

2009-04-17 6:49 pm
Problem Description
把2個整數A、B,然後由右至左依序對應作相加,例如:A的個位數加B的個位數,A的十位數加B的十位數,依此類推。如果相加的結果大於等於10就有進位(carry)的情況出現。設計一程式輸入2個小於10位正整數m、n(1<m<10000000000, 1<n<10000000000),判斷2個整數相加時產生了幾次進位的情況。

回答 (1)

2009-04-18 2:50 pm
✔ 最佳答案
#include <stdio.h>

#define MAX 256

void reverse(char* ptr)
{
char tmp[MAX];
char* s1;
char* s2=tmp;

s1 = ptr;
while (*s1 != '\0') {
s1++;
}

--s1;
while(s1 != ptr) {
*s2++ = *s1--;
}
*s2++ = *ptr;
*s2 = '\0';
strcpy( ptr, tmp );
}

int main()
{
char a[MAX];
char b[MAX];
int i,k,m,n,carry,total;

printf("Please input number A: ");
scanf("%s", a);
printf("Please input number B: ");
scanf("%s", b);

reverse(a);
reverse(b);

m = strlen(a);
n = strlen(b);

carry = 0;
total = 0;
k = (m > n ? n : m); /* whichever smaller */
for (i=0; i < k; i++) {
if ((a[i] + b[i] + carry - '0' - '0') >= 10 ) {
carry ++;
total ++;
}
if (carry > 1) {
carry = 1;
}
}
printf("Number of carry: %d\n", total);
}





收錄日期: 2021-05-01 23:53:16
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20090417000016KK02525

檢視 Wayback Machine 備份