- 论坛徽章:
- 0
|
已经解决,能实现功能!代码质量很差,能否改进一下?
- #include <stdio.h>
- #include <stdlib.h>
- int main(int argc, char** argv)
- {
- int a[100], b[100], r[100];//数组p保存结果
- int i = 0, j = 0;
- int len1, len2, val_p, val_q, k, c, ch, m;
- int *p = a, *q = b;//p指向大数数组,q指向小数数组
- for(k = 0; k < 100; k++){
- a[k] = 0;
- b[k] = 0;
- r[k] = 0;
- }
- while((ch = getchar()) != '\n'){
- a[i] = ch - 48;
- i++;
- }//输入一个减数,i是a的长度
- while((ch = getchar()) != '\n'){
- b[j] = ch - 48;//字符转化为整数
- j++;
- }//输入被减数,j是b的长度
- i--;
- j--;
- m = (i > j) ? i : j;//m是i,j中的最大值
- //判断谁是大的操作数,并用p指向它,len1表示它的长度
- if(i > j){
- p = a;
- q = b;
- len1 = i;
- len2 = j;
- }
- else if(i < j){
- p = b;
- q = a;
- len1 = j;
- len2 = i;
- }
- else if(i == j){
- for(k = 0; k < i; k++){
- if(a[k] > b[k]){
- p = a;
- q = b;
- len1 = i;
- len2 = j;
- break;
- }
- if(a[k] < b[k]){
- p = b;
- q = a;
- len1 = j;
- len2 = i;
- break;
- }
- }//for
- }
- for(k = m; k >= 0; k--){
- if((len1 >= 0) && (len2 >= 0)){
- val_p = *(p+len1);
- val_q = *(q+len2);
- // printf("val_p = %d, val_q = %d\n", val_p, val_q);
- }
- else if((len1 >= 0) && (len2 < 0)){
- val_p = *(p+len1);
- val_q = 0;
- }
- if(val_p >= val_q){
- r[k] = val_p - val_q;
- }
- else{//借位
- (*(p+len1-1))--;
- r[k] = 10 + val_p - val_q;
- }
- len1--;
- len2--;
- }
- if(p == b){
- printf("-");
- }
- if(r[0] != 0){
- printf("%d", r[0]);
- }
- for(k = 1; k <= m; k++){
- printf("%d", r[k]);
- }
- printf("\n");
- exit(0);
- }
复制代码 |
|