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;
}