首页 > 代码库 > 题目1003:A+B
题目1003:A+B
- 题目描述:
- 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。
现在请计算A+B的结果,并以正常形式输出。
- 输入:
- 输入包含多组数据数据,每组数据占一行,由两个整数A和B组成(-10^9 < A,B < 10^9)。
- 输出:
- 请计算A+B的结果,并以正常形式输出,每组数据占一行。
- 样例输入:
-234,567,890 123,456,7891,234 2,345,678
- 样例输出:
-1111111012346912
- 来源:
- 2010年浙江大学计算机及软件工程研究生机试真题
--------------------------------------------------------------------------
思路:
- 由字符数组输入,忽略‘,‘按权值转换成整形数据即可
----------------------------------------------------------------------
代码1
1 #include<stdio.h> 3 int main(int argc, char const *argv[]) 4 { 5 int A,B; 6 int i; 7 char a[13],b[13]; 8 while(scanf("%s%s",a,b)!=EOF) 9 {10 A=0;11 for(i=0;a[i]!=‘\0‘;i++)12 if(a[i]>=‘0‘&&a[i]<=‘9‘)13 A=A*10+a[i]-‘0‘;14 if(a[0]==‘-‘)15 A=-A;16 B=0;17 for(i=0;b[i]!=‘\0‘;i++)18 if(b[i]>=‘0‘&&b[i]<=‘9‘)19 B=B*10+b[i]-‘0‘;20 if(b[0]==‘-‘)21 B=-B;22 printf("%d\n",A+B);23 }24 return 0;25 }
代码2:(严格按照从个位开始,每三位数用逗号","隔开。代码一可以随意输入‘,’,而且输入其它字符也可以通过,而这段代码却要求输入非常严格,不能有一点错误。这段代码数组越界了~还不会改,不过在自己电脑上运行完全正确。)
1 #include<stdio.h> 2 #include<math.h> 3 int input(void); 4 void tran(char *t,int k); 5 int A,B; 6 int main(int argc, char const *argv[]) 7 { 8 while(input()) 9 { 10 // printf("a=%d\n",A);// 11 // printf("b=%d\n",B);// 12 printf("%d\n",A+B); 13 // getchar(); 14 } 15 return 0; 16 } 17 int input(void) 18 { 19 20 char t[26]; 21 char t1[13],t2[13]; 22 int i,j,p; 23 int flag; 24 for(i=0;i<13;i++) 25 { 26 t1[i]=‘0‘; 27 t2[i]=‘0‘; 28 } 29 gets(t); 30 for(i=0;t[i]!=‘\0‘;i++) 31 if((t[i]<‘0‘||t[i]>‘9‘)&&t[i]!=‘,‘&&t[i]!=‘ ‘&&t[i]!=0&&t[i]!=‘-‘) 32 return(0); 33 p=0; 34 flag=1; 35 for(i=0;flag;i++) 36 { 37 if(t[i]==‘ ‘) 38 { 39 p=i; 40 flag=0; 41 } 42 else 43 { 44 t1[i]=t[i]; 45 } 46 } 47 t1[p]=‘\0‘; 48 flag=1; 49 for(i=p+1,j=0;flag;i++,j++) 50 { 51 if(t[i]==0) 52 flag=0; 53 else 54 t2[j]=t[i]; 55 } 56 t2[j-1]=‘\0‘; 57 // printf("t1 %s\n",t1);// 58 // printf("t2 %s\n",t2);// 59 tran(t1,1); 60 tran(t2,2); 61 return(1); 62 } 63 64 void tran(char *t,int k) 65 { 66 char a[3][3],b[3][3]; 67 int C; 68 int f,i,j,q; 69 int flag; 70 int cout,cout0; 71 int c; 72 for(i=0;i<3;i++) 73 for(j=0;j<3;j++) 74 { 75 a[i][j]=‘0‘; 76 b[i][j]=‘0‘; 77 } 78 79 if(t[0]==‘-‘) 80 f=1; 81 else 82 { 83 f=0; 84 for(i=0,q=0;t[i]!=‘\0‘;i++,q++) 85 {} 86 for(i=q+1;i>0;i--) 87 t[i]=t[i-1]; 88 } 89 //printf("t %s\n",t);// 90 for(i=1,cout=1;t[i]!=‘\0‘;i++) 91 if(t[i]==‘,‘) 92 cout++; 93 if(cout==1) 94 { 95 for(i=3,cout0=3;i>0;i--,cout0--) 96 if(t[i]!=‘0‘) 97 break; 98 } 99 else100 {101 for(i=4,cout0=3;i>0;i--,cout0--)102 {103 if(t[i]==‘,‘)104 break;105 }106 }107 //printf("cout:%d %d\n",cout,cout0);//108 switch(cout)109 {110 case 1:111 switch(cout0)112 {113 case 1:114 {115 a[2][2]=t[1];116 }117 break;118 case 2:119 {120 a[2][2]=t[2];121 a[2][1]=t[1];122 }123 break;124 case 3:125 {126 a[2][2]=t[3];127 a[2][1]=t[2];128 a[2][0]=t[1];129 }130 break;131 }132 break;133 case 2:134 {135 switch(cout0)136 {137 case 1:138 {139 a[1][2]=t[1];140 a[2][0]=t[3];141 a[2][1]=t[4];142 a[2][2]=t[5];143 }144 break;145 case 2:146 {147 a[1][1]=t[1];148 a[1][2]=t[2];149 a[2][0]=t[4];150 a[2][1]=t[5];151 a[2][2]=t[6];152 153 }154 break;155 case 3:156 {157 a[1][0]=t[1];158 a[1][1]=t[2];159 a[1][2]=t[3];160 a[2][0]=t[5];161 a[2][1]=t[6];162 a[2][2]=t[7];163 }164 break;165 }166 167 }168 break;169 case 3:170 {171 switch(cout0)172 {173 case 1:174 {175 a[0][2]=t[1];176 a[1][0]=t[3];177 a[1][1]=t[4];178 a[1][2]=t[5];179 a[2][0]=t[7];180 a[2][1]=t[8];181 a[2][2]=t[9];182 }183 break;184 185 case 2:186 {187 a[0][1]=t[1];188 a[0][2]=t[2];189 a[1][0]=t[4];190 a[1][1]=t[5];191 a[1][2]=t[6];192 a[2][0]=t[8];193 a[2][1]=t[9];194 a[2][2]=t[10];195 }196 break;197 case 3:198 {199 a[0][0]=t[1];200 a[0][1]=t[2];201 a[0][2]=t[3];202 a[1][0]=t[5];203 a[1][1]=t[6];204 a[1][2]=t[7];205 a[2][0]=t[9];206 a[2][1]=t[10];207 a[2][2]=t[11];208 } 209 break;210 }211 212 }213 break;214 }215 // printf("a[i][j] ");//216 // for(i=0;i<3;i++)//217 // for(j=0;j<3;j++)//218 // printf("%c",a[i][j]);//219 // printf("\n");//220 flag=0;221 c=0;222 for(i=0;i<3;i++)223 {224 if(flag)225 break;226 for(j=0;j<3;j++)227 {228 if(a[i][j]==‘0‘)229 { c++; 230 }231 else232 {233 flag=1;234 break;235 }236 }237 }238 c=9-c;239 cout=0;240 C=0;241 for(i=2;cout<c;i--)242 {243 for(j=2;cout<c;j--)244 {245 C=C+(int)pow(10,cout)*(a[i][j]-‘0‘);246 cout++;247 }248 }249 if(f==1)250 C=-C;251 if(k==1)252 A=C;253 else if(k==2)254 B=C;255 }
-----------------------------------------------------------------------------------------
小结:
- 对字符数组的操作,用‘\0‘判断数组结束
- 在运行界面先切换成半角输入,不然输入‘,‘等一些字符会出错
- 利用flag标志变量,来对某一些不好退出的循环就行控制
- switch(条件) case 条件满足的条件:语句;break;
- 数组的内容传递给形参,只要用数组名即可
----------------------------------------------------------------------------------------------
资料查询:
二维数组指针:http://www.cnblogs.com/carekee/articles/1948326.html
int类型长度:http://bbs.bccn.net/thread-364170-1-1.html
字符串初始化:http://blog.csdn.net/ace_fei/article/details/7448368
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。