PAT甲级1001(c语言)


PAT甲级1001(c语言)

第一次写搞忘了输出格式%03d(不足三位左补零)以下是比较蠢的代码:

#include<stdio.h>
#include<math.h>
int main(){
 int a, b;
 int sum;
 int r, c, r1, c1;//r 为商,c为余数, r1为c的商,c1为c的余数 
 scanf("%d %d", &a, &b);
 sum = a + b;
 if (abs(sum) >= 1000 && abs(sum) < 1000000){
  r = sum / 1000;
  c = abs(sum % 1000);
  printf("%d,", r);
  if (c >= 0 && c < 10){
   printf("00%d", c);
  }
  if (c >= 10 && c < 100){
   printf("0%d", c);
  }
  if (c >= 100 && c < 1000){
   printf("%d", c);
  }
 }
 
 
 
 if (abs(sum) >= 1000000){
  r = sum / 1000000;
  c = abs(sum % 1000000);
  printf("%d,", r);
  if (c >= 0 && c < 10){
   printf("000,");
   printf("00%d", c);
  }
  if (c >= 10 && c < 100){
   printf("000,");
   printf("0%d", c);
  }
  if (c >= 100 && c < 1000){
   printf("000,");
   printf("%d", c);
  }
  
  
  
  if (c >= 1000 && c < 10000){
   r1 = c / 1000;
   c1 = c%1000;
   printf("00%d,", r1);
   if (c1 >= 0 && c1 < 10){
    printf("00%d", c1);
   }
   if (c1 >= 10 && c1 < 100){
    printf("0%d", c1);
   }
   if (c1 >= 100 && c1 < 1000){
    printf("%d", c1);
   }
  }
  if (c >= 10000 && c < 100000){
   r1 = c / 1000;
   c1 = c%1000;
   printf("0%d,", r1);
   if (c1 >= 0 && c1 < 10){
    printf("00%d", c1);
   }
   if (c1 >= 10 && c1 < 100){
    printf("0%d", c1);
   }
   if (c1 >= 100 && c1 < 1000){
    printf("%d", c1);
   }
  }
  if (c >= 100000 && c < 1000000){
   r1 = c / 1000;
   c1 = c%1000;
   printf("%d,", r1);
   if (c1 >= 0 && c1 < 10){
    printf("00%d", c1);
   }
   if (c1 >= 10 && c1 < 100){
    printf("0%d", c1);
   }
   if (c1 >= 100 && c1 < 1000){
    printf("%d", c1);
   }
  }
 }
 if (abs(sum) < 1000)
  printf("%d", sum); 
 return 0;
} 

情况一(特殊处理):

由输入决定本题输出和最高为7位:采用%03d不足3位左补0输出。


#include<stdio.h>
int main(){
 int a, b, sum;
 scanf("%d %d", &a, &b);
 sum = a+b;
 if (sum < 0){
  printf("-");
  sum = -sum;
 }
 if (sum >= 1000 && sum < 1000000){
  printf("%d,%03d", sum/1000, sum%1000);
 }
 if (sum < 1000){
  printf("%d", sum);
 }
 if (sum >= 1000000){
  printf("%d,%03d,%03d", sum/1000000, sum%1000000/1000, sum%1000000%1000);
 }
 return 0;
} 

情况二:

采用将整数转换为字符串处理,用到string.h头文件中的strlen()与sprintf()两个函数:
思路:由于输出以3个整数为一组(若输出长度小于4则不用)。所以将输出和转换为字符串求得长度,余数形式共3种(0,1, 2)。分别分析这三种情况,代码如下:

#include<stdio.h>
#include<string.h>
int main(){
 int a, b, len, m, n, start, sum;//m为商,n为余数,start位置标记符 
 char s[20];
 scanf("%d %d", &a, &b);
 sum = a+b;
 if (sum < 0){
  printf("-");
  sum = -sum;
 }
 sprintf(s, "%d", sum);//将sum转换为字符串数组 
 start = 0;
 len = strlen(s);
 m = len/3;
 n = len%3;
 if (n == 0) {
  printf("%c%c%c", s[0], s[1], s[2]);
  --m;
  start = 3;
 }
 if (n == 1) {
  printf("%c", s[0]);
  start = 1;
 }
 if (n ==2){
  printf("%c%c", s[0], s[1]);
  start = 2;
 }
 while (m!=0){
  --m;
  printf(",");
  printf("%c%c%c",s[start], s[start+1], s[start+2]);
  start += 3;
 }
 return 0; 
}