pat乙级真题 1074. 宇宙无敌加法器(20)

来源:互联网 发布:内网映射端口到外网 编辑:程序博客网 时间:2024/05/16 09:23

题目链接

                   点击打开链接

注意事项

1 一定要注意PAT之和为0的情况,最后一个测试点。 2 PAT之和所对应的数字除了结果为0外,不能以0开头。 3 记得把PAT数制中的0转换为十进制

代码

#include <stdio.h>#include <stdlib.h>#include <string.h>char PAT[30], //存储PAT数制num1[30], num2[30],num[30]; //存储计算后的结果int PATCnt,num1Cnt,num2Cnt;/*******************************************************函数功能:字符串前后倒转********************************************************/void trans(char a[],char b[],int num){int i,j;for(i = num - 1,j = 0;i>=0;i--,j++){b[j] = a[i];}}/*******************************************************函数功能:把输入字符串倒转后,分别存入对应数组中********************************************************/void deal_input(){char temp[30];scanf("%s",temp);     PATCnt = strlen(temp);trans(temp,PAT,PATCnt);scanf("%s",temp);num1Cnt= strlen(temp);trans(temp,num1,num1Cnt);scanf("%s",temp);num2Cnt = strlen(temp);trans(temp,num2,num2Cnt);}int main(){int i;for( i = 0;i<30;i++){    //用'0'初始化,方便后面的处理PAT[i] = num1[i] = num2[i] = '0';}deal_input();int flag = 0, //标志进位。n;for(i = 0;i<num1Cnt || i<num2Cnt;i++){if(PAT[i] == '0')  n = 10;elsen = PAT[i] - '0';num[i] = '0' + ((num1[i] + num2[i] - 2 * '0' + flag) % n);if((num1[i] + num2[i] - 2 * '0' + flag) / n)flag = 1;elseflag = 0;}num[i] = '0'+flag; //PAT之和可能比两个相加数多一位while(num[i] == '0'){ //PAT之和不能以0开头。if(i)i--;else              //若PAT之和为0break;}for(;i>=0;i--){printf("%d",num[i] - '0');}return 0;}


原创粉丝点击