初学c语言之开学第一次打卡

近日开学,忙了好多事,因此隔了好久才写了这篇博客。话少,就直接进入正题了:
数数字问题
这是题目:
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出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 

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

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

最后,最近做题较少,日后会加大练习强度。
文章略潦草,请见谅。

你可能感兴趣的:(C语言)