华为机考题目及答案

发布时间:2012-07-13 22:40:38

则num2[0]为符号位'-' 【输出】result:保存加法计算结果字符串,如果结果为负,则result[0]为符号位。 注: I、 当输入为正数时,'+'不会出现在输入字符串中;当输入为负数时,'-'会出现在输入字符串中,且一定在输入字符串最左边位置; II、输入字符串所有位均代表有效数字,即不存在由'0'开始的输入字符串,比如"0012", "-0012"不会出现; III、要求输出字符串所有位均为有效数字,结果为正或0时'+'不出现在输出字符串,结果为负时输出字符串最左边位置为'-'。 示例 输入:num1 = "580" num2 = "-50" 输出:result = "530" 输入:num1 = "580" num2 = "-600" 输出:result = "-20" 我的答案: #include #include int cmp(const char* s1, const char* s2) { if(strlen(s1) > strlen(s2)) return 1; else if(strlen(s1) < strlen(s2)) return -1; else return strcmp(s1, s2); } void rev(char *str) { char tem; int i; int len = strlen(str); for(i = 0; i < len/2; i++) { tem = str[i]; str[i] = str[len - 1 - i]; str[len - 1 - i] = tem; } } void add(const char *num1, const char *num2, char *result) { int i1 = strlen(num1) - 1; int i2 = strlen(num2) - 1; const char *p1 = num1; const char *p2 = num2; char p[200]; int r = 0; int jw = 0; if((p1[0] != '-') && (p2[0] != '-')) { while(i1 >= 0 && i2 >= 0) { result[r++] = ((p1[i1] - '0') + (p2[i2] - '0') + jw) % 10 + '0'; jw = ((p1[i1] - '0') + (p2[i2] - '0') + jw) / 10; i1--; i2--; } while(i1 >= 0) { result[r++] = ((p1[i1] - '0') + jw) % 10 + '0'; jw = ((p1[i1] - '0') + jw) / 10; i1--; } while(i2 >= 0) { result[r++] = ((p2[i2] - '0') + jw) % 10 + '0'; jw = ((p2[i2] - '0') + jw) / 10; i2--; } if(jw != 0) { result[r++] = jw + '0'; } result[r] = '\0'; rev(result); } else if((p1[0] == '-') && (p2[0] == '-')) { while(i1 > 0 && i2 > 0) { result[r++] = ((p1[i1] - '0') + (p2[i2] - '0') + jw) % 10 + '0'; jw = ((p1[i1] - '0') + (p2[i2] - '0') + jw) / 10; i1--; i2--; } while(i1 > 0) { result[r++] = ((p1[i1] - '0') + jw) % 10 + '0'; jw = ((p1[i1] - '0') + jw) / 10; i1--; } while(i2 > 0) { result[r++] = ((p2[i2] - '0') + jw) % 10 + '0'; jw = ((p2[i2] - '0') + jw) / 10; i2--; } if(jw != 0) { result[r++] = '1'; } result[r++] = '-'; result[r] = '\0'; rev(result); } else if((p1[0] != '-') && (p2[0] == '-')) { int index; for(index = 0; p2[index] != '\0'; index++) { p[index] = p2[index + 1]; } p[index] = '\0'; i2 = i2 - 1; if(cmp(p1, p) == 1) { // p1 - p while(i1 >= 0 && i2 >= 0) { if(((p1[i1] - '0') - (p[i2] - '0') - jw) >= 0) { result[r++] = ((p1[i1] - '0') - (p[i2] - '0') - jw) + '0'; jw = 0; } else if(((p1[i1] - '0') - (p[i2] - '0') - jw) < 0) { result[r++] = ((p1[i1] - '0') - (p[i2] - '0') - jw) + 10 + '0'; jw = 1; } i1--; i2--; } while(i1 >= 0) { result[r++] = ((p1[i1] - '0') - jw) + '0'; jw = 0; i1--; } result[r] = '\0'

华为机考题目及答案

相关推荐