c语言实现一百位以内大数加减,求用C编个大数加减法运算程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

只写过加法的,杭电的A + B Problem (II)(AC):

#include

#include

#include

#define N 3000

int main(void)

{

int n, i, j, k, p, q, a, b, t, up;

char s[N];

scanf("%d ", &n);

for (i = 0; i < n; i++) {

int sum[N] = {0};

printf("Case %d:\n", i + 1);

fgets(s, N, stdin);

for (t = q = strlen(s) - 2; isdigit(s[t]); t--)

;

for (p = t - 1, up = j = 0; p >= 0 || isdigit(s[q]);) {

a = p >= 0 ? s[p--] - '0' : 0;

b = isdigit(s[q]) ? s[q--] - '0' : 0;

t = a + b + up;

sum[j++] = t % 10;

up = t / 10;

}

if (up) sum[j] = up;

for (k = 0; isdigit(s[k]);) printf("%d", s[k++]-'0');

for (printf(" + "), k++; k < strlen(s) - 1;) printf("%d", s[k++]-'0');

for (printf(" = "), k = N-1; sum[k] == 0; k--) ;

for (; k >= 0; k--) printf("%d", sum[k]);

printf("\n");

if (i != n-1) printf("\n");

}

return 0;

}

供参考……减法应该类似……不难写出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include<stdio h> #include<string h> int main { int len1 len2 i j k t m; char str1[100] str2[100] str[100]; while scanf "%s %s" str1 str2 EOF { m 0; len1 strlen str1 ; len2 strlen str2 ; for i 0;i<len1;i++ str1[i] 48; for j 0;j<len2;j++ str2[j] 48; if len1 len2 {for i 0;i<len1;i++ { if str1[i]>str2[i] {for i len1 1 j len2 1 k 0;j> 1;i j k++ { if str1[i]<str2[j] {str1[i]+ 10;if str1[i 1]>0 str1[i 1] ;else {str1[i 1] 9;str1[i 2] ;}} str[k] str1[i] str2[j]; } break; } if str2[i]>str1[i] { for i len1 1 j len2 1 k 0;j> 1;i j k++ { if str1[i]>str2[j] {str2[j]+ 10;if str2[j 1]>0 str2[j 1] ;else {str2[j 1] 9;str2[j 2] ;}} str[k] str2[j] str1[i]; } printf " " ; break; } else{for i 0;i<len1;i++ str[i] 0;break;} } t len1 1; } if len1>len2 { for i len1 1 j len2 1 k 0;j> 1;i j k++ { if str1[i]<str2[j] {str1[i]+ 10;if str1[i 1]>0 str1[i 1] ;else {str1[i 1] 9;str1[i 2] ;}} str[k] str1[i] str2[j]; } for i len1 len2 1 k len2;k<len1;i k++ { str[k] str1[i]; } t len1 1; } if len1<len2 { for i len1 1 j len2 1 k 0;j> 1;i j k++ { if str1[i]>str2[j] {str2[j]+ 10;if str2[j 1]>0 str2[j 1] ;else {str2[j 1] 9;str2[j 2] ;}} str[k] str2[j] str1[i]; } for j len2 len1 1 k len1;k<len2;j k++ { str[k] str2[j]; } printf " " ; t len2 1; } for i t;i> 1;i { if m 0 printf "%d" str[i] ; if m 0&&str[i] 0 {printf "%d" str[i] ;m++;} } if m 0 printf "0" ; printf " n" ; } return 0; }">#include<stdio h> #include<string h> int main { int len1 len2 i j k t m; char str1[100] str2[100] str[100]; while scanf "%s %s" str1 str2 EOF { m 0; len1 strlen str1 ; len2 strlen str2 ; for i 0;i<len1;i++ str1[i] 48; for j 0;j<len2;j++ str2[j] 48; if len1 len2 [更多]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值