红豆泥! 2021-06-15 23:46 采纳率: 85%
浏览 13
已采纳

大家能帮我想一下这些步骤是为什么吗

#include<stdio.h>

int main(){
	
	char a[200] ,b[200];

	while(scanf("%s",a) != EOF){
		int answer[202] = {0};
		getchar();
		scanf("%s",b);
		
		int i,n, j =0 , k ;
		
		for(i = 0; a[i+1] !=0; ){
			i++;
		}
		for(n = 0; b[n+1] !=0;){
			n++;
		}
		for(;(i >= 0) || (n >= 0); i--, n--, j++){
			
			if(n < 0) {
				answer[j] +=  (a[i] - 48);
			}
			
			else if(i < 0) {
				answer[j] += (b[n] - 48) ;
			}
			
			else{
				answer[j] += (a[i] + b[n] - 48 - 48) ;
			}
			k = j;
			if(answer[j] >= 10){
				answer[j + 1] = (answer[j] / 10);
				answer[j] = (answer[j] % 10);
				k++ ;
			}
		}
		
		for(; k >= 0; k--){
			printf("%d",answer[k]);
		}
		printf("\n");
	}
	return 0;
}

题目是200位以内的大整数加法

请问 getchar()是为什么出现在那个位置,及为什么会有

else{
				answer[j] += (a[i] + b[n] - 48 - 48) ;

这种-48-48为什么要减去48

  • 写回答

1条回答 默认 最新

  • shn_baby 2021-06-16 09:01
    关注

    突然想明白了...直接回答你的问题叭:

    1. getchar()在这里是没用的,可以直接注释
    2. -48是因为char型数字对应的ASCII码数值是比自身大48的。你的输入其实是char型变量。如果你输入'0'的话,对应的ASCII码就是48。之后减去48之后就变成了整形的0。这个+=右边按照正常顺序应该写成((a[i]-48)+(b[n]-48))就好理解了
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)
  • ¥15 船舶旋回实验matlab
  • ¥30 SQL 数组,游标,递归覆盖原值
  • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据