近日开学,忙了好多事,因此隔了好久才写了这篇博客。话少,就直接进入正题了:
数数字问题
这是题目:
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出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
思路:
1.需要一个判断正负的步骤;
2.需要一个循环来依次分解各位数字;
3.因为是从个位开始分解而读出拼音是从最大位数开始,所以需要数组存储,然后逆向输出。
下面是代码(之前尝试用数组,后来找不出原因,所以第一个用的switch-case):
#include<stdio.h>
int main()
{
int num;
int i=0;
int number[100];
scanf("%d",&num); //读入
if(num<0){ //判断正负
printf("fu ");
num = 0 - num; //转为正数
}
if(num==0){
printf("ling");
}
for(;num>0;i++){ //存入各位数字
number[i] = num % 10;
num = num / 10;
}
for(i--;i>=0;i--){
int j=number[i];
switch(j){
case 0:
printf("ling");
break;
case 1:
printf("yi");
break;
case 2:
printf("er");
break;
case 3:
printf("san");
break;
case 4:
printf("si");
break;
case 5:
printf("wu");
break;
case 6:
printf("liu");
break;
case 7:
printf("qi");
break;
case 8:
printf("ba");
break;
case 9:
printf("jiu");
break;
}
if(i!=0){
printf(" ");
}
}
return 0;
}
其中switch-case可以改成字符数组,不过还没写完,等日后更新。
个位数统计
题目:
个位数统计(15 分)
给定一个 k 位整数 N=d
k−1
10
k−1
+⋯+d
1
10
1
+d
0
(0≤d
i
≤9, i=0,⋯,k−1, d
k−1
>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。
输入格式:
每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。
输出格式:
对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。
输入样例:
100311
输出样例:
0:2
1:3
3:1
写在前面:代码编译正确,但试运行之后发现存在范围限制,读入超出一定位数的数字不能输出正确结果,原因还在找。下面是代码:
#include<stdio.h>
int main()
{
int N; //需要分解的次数
int num[10]={0}; //各位数字出现的次数
int d; //0到9
scanf("%d",&N);
if(N==0){
return 0;
}
for(;(N>=1);){
d = N % 10;
num[d]++;
N = N / 10;
}
for(d=0;d<10;d++){
if(num[d]!=0){
printf("%d:%d\n",d,num[d]);
}
}
return 0;
}
最后,最近做题较少,日后会加大练习强度。
文章略潦草,请见谅。