求和问题
计算若干十六进制数的和。输入
输入有若干行,每行为由空格分隔的若干数十六进制整数(不超过10000个),如:
5 A
输出
控制台输出,对每行输入,输出该行十六进制数的和,用十进制表示。如:
15
示例输入
0xB 0xC
示例输出
23
我的程序有些正确有些错误为啥呀{:10_243:}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int sum = 0;
void HEX_DEC(int num, int N) {
if (num > N - 1) {
HEX_DEC(num / N, N);
}
num = num % N;
}
int main() {
int num;
while (scanf("%x", &num) != EOF) {
HEX_DEC(num, 10);
sum += num;
while (getchar() == '\n')
printf("%d\n", sum);
}
return 0;
} 本帖最后由 jackz007 于 2021-3-24 23:00 编辑
每行键入 10000 个数会超过系统设置的键盘缓冲区的最大长度,根本不可能做得到!
难道用死循环?确定输入结束的条件是什么?硬性规定一共输入 n 行,每行 m 个数据?
#include <stdio.h>
#include <stdlib.h>
int sum = 0;
int main() {
int num;
int ch;
while(scanf("%x", &num) != EOF) {
sum += num;
input:
ch = getchar();
if(ch == ' ' || ch == '\t' || ch == '\v' || ch == '\f') goto input;
if(ch == '\n') {
printf("%d\n", sum);
sum = 0;
}
else ungetc(ch, stdin);
}
return 0;
}
本帖最后由 jackz007 于 2021-3-25 03:10 编辑
真正的按行输入,每行可以输入 "任意" 多个数
最后输入空回车结束输入
#include <stdio.h>
int main(void)
{
int c , d , i , j , k , s ;
char a ;
for(i = 0 ; ; i ++) {
gets(a) ;
if(a) {
for(c = 1 , j = k = 0 ; a ; j ++) {
for(; a && (a == ' ' || a == '\t') ; k ++) ;
if(a) {
sscanf(& a , "%x" , & d) ;
for(; a && a != ' ' && a != '\t' ; k ++) ;
}
}
d = c - 1 ;
} else {
break ;
}
}
for(k = i , i = 0 ; i < k ; i ++) {
for(s = 0 , j = 1 ; j < d + 1 ; j ++) s += d ;
printf("%d\n" , s) ;
}
}
编译、运行实况
D:\00.Excise\C>g++ -o x x.c
D:\00.Excise\C>x
5 A
0xB 0xC
0x1 0x2 0x3 0x4 0x55 0xff 0xfff
15
23
4445
D:\00.Excise\C>
页:
[1]