L1-007 念数字
题目描述
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出
fu
字。十个数字对应的拼音如下:
0: ling 1: yi 2: er 3: san 4: si 5: wu 6: liu 7: qi 8: ba 9: jiu
输入描述
输入在一行中给出一个整数,如:
1234
。提示:整数包括负数、零和正数。
输出描述
在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如
:yi er san si
。
输入样例
-600
输出样例
fu liu ling ling
解题代码
#include<stdio.h> int main() { // 数字对应的字符串数组 char* num[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"}; // 输入一个字符串 char n[100]; scanf("%s", n); int i = 0; // 判断是否为负数 if (n[0] == 45) { printf("fu "); i++; } int j; // 遍历字符串,将每个数字转换为对应的字符串并输出 while (n[i + 1] != '\0') { // 将字符转换为数字 j = n[i] - 48; // 输出数字对应的字符串 printf("%s ", num[j]); i++; } // 输出最后一个数字对应的字符串 j = n[i] - 48; printf("%s", num[j]); return 0; }
本题的解题步骤为:
- 创建字符指针数组,存放待输出的10个字符串
- 接收输入数字,并遍历输出对应字符串
- 单独输出最后一个字符,使其后方没有空格
细节详解见代码注释.
提交结果
L1-008 求整数段和
题目描述
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
输入描述
输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。
输出描述
首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按
Sum = X
的格式输出全部数字的和X
。
输入样例
-3 8
输出样例
-3 -2 -1 0 1
2 3 4 5 6
7 8
Sum = 30
解题代码
#include <stdio.h> int main() { // 初始化变量a和b int a = 0; int b = 0; // 输入a和b的值 scanf("%d %d", &a, &b); // 初始化变量sum和count int sum = 0; int count = 0; // 从a循环到b,每次累加到sum,并输出数字 for (; a <= b; a++) { sum += a; // 输出数字,使用%5d格式控制输出宽度为5 printf("%5d", a); count++; // 每输出5个数字换行 if (count % 5 == 0 && count != 0) { printf("\n"); } } // 如果数字总数不是5的倍数,再换行一次 if (count % 5 != 0) { printf("\n"); } // 输出数字的和 printf("Sum = %d", sum); return 0; }
本题的解题步骤为:
- 边遍历累加计算sum,边遍历输出a递增到b的数字
- 注意输出格式!注意输出格式!注意输出格式!
细节详解见代码注释.
提交结果
L1-009 N个数求和*
题目描述
本题的要求很简单,就是求
N
个数字的和。麻烦的是,这些数字是以有理数分子/分母
的形式给出的,你输出的和也必须是有理数的形式。
输入描述
输入第一行给出一个正整数
N
(≤100)。随后一行按格式a1/b1 a2/b2 ...
给出N
个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。
输出描述
输出上述数字和的最简形式 —— 即将结果写成
整数部分 分数部分
,其中分数部分写成分子/分母
,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。
输入样例
5
2/5 4/15 1/30 -2/60 8/3
输出样例
3 1/3
解题代码
#include <stdio.h> // 计算最大公约数 long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); } int main() { int N; scanf("%d", &N); long long sum_numerator = 0; // 分子的和 long long sum_denominator = 1; // 分母的和 for (int i = 0; i < N; i++) { long long numerator, denominator; scanf("%lld/%lld", &numerator, &denominator); // 计算最大公约数并约分 long long d = gcd(numerator, denominator); numerator /= d; denominator /= d; // 计算公倍数并相加 sum_numerator = sum_numerator * denominator + numerator * sum_denominator; sum_denominator *= denominator; // 再次计算最大公约数并约分 d = gcd(sum_numerator, sum_denominator); sum_numerator /= d; sum_denominator /= d; } // 输出结果 if (sum_denominator == 1) { printf("%lld\n", sum_numerator); } else if (sum_numerator > sum_denominator) { printf("%lld %lld/%lld\n", sum_numerator / sum_denominator, sum_numerator % sum_denominator, sum_denominator); } else { printf("%lld/%lld\n", sum_numerator, sum_denominator); } return 0; }
本题的解题步骤为:
- 需要一个函数来计算两个数的最大公约数.
- 读取输入的有理数,并将它们转换为最简形式.
- 将这些有理数相加,并将结果转换为最简形式.
细节详解见代码注释.
提交结果