#include <stdio.h>
#include <math.h>
#include "week5.h"
//拼音输出数字
//二维字符数组按顺序存放拼音,用字符变量读取数据,转为整数减去48即是对应的数字也是拼音数组下标
void pinYin(){
//用二维数组存放拼音
char yin[10][5]={
"ling","yi","er","san","si",
"wu","liu","qi","ba","jiu"
};
//一个字符数组读数
char read[10];
printf("请输入一个数字");
scanf("%s",read);
//如果第一个数是-输出fu
if(read[0]=='-'){
printf("fu ");
}
else{
//循环遍历数组并输出
for(int i=0;;i++){
int foot=(int)read[i]-48;
printf("%s",yin[foot]);
//输入数组下一个为\0时破出循环
if(read[i+1]=='\0'){
break;
}
//否则每个数后面加空格
printf(" ");
}
}
}
//素数和
//计算n-m的素数和
int suShuSum(int n,int m){
//找前m个素数
//一个数组store存放素数,一个变量num对找到的素数进行计数
int store[m];
store[0]=2;
int num=1;
for(int i=3;i<100000;i++){
for(int j=2;j<i;j++){
if(i%j==0){
break;
}
//找到素数,放入数组
if(j==i-1){
store[num]=i;
num++;
}
}
//找到m个素数破除循环
if(num==m){
break;
}
}
//数组第n项到m项求和
int sum=0;
for(int i=n-1;i<m;i++){
sum+=store[i];
}
//输出
printf("第%d-%d个素数的和为%d\n",n,m,sum);
return sum;
}
//求逆序数:计位数+连续求商,循环条件为介质数大于0
void reverse(int n){
//求位数
//一个变量存放n,一个计数变量count
int temp1=n;
int count=0;
do{
//消除一位记一次数
temp1/=10;
count++;
}while(temp1>0);
//取商
//求取商介质
int tens=pow(10,count-1);
//取商并输出
//2个变量,一个存放商,一个放数值
int x=n;
int shang=0;
do{
//求商
shang=x/tens;
printf("%d",shang);
//x为倒数第一位之前时输出空格
if(tens>9){
printf(" ");
}
//x变为剩下部分,介质数量级降一级
x%=tens;
tens/=10;
}while(tens>0);
}
//求最大公约数
//遍历求解
//两个参数,三个变量,一个记录最终结果,一个记录较小数,一个遍历从2到较小数,一个记录最终结果
int yueshu(int a,int b){
//找出较小数
int min;
if(a<b){
min=a;
}
else{
min=b;
}
//开始求最大公约数
int result=1;
for(int i=2;i<=min;i++){
if(a%i==0&&b%i==0){
result=i;
}
}
//输出
printf("最大公约数是%d\n",result);
return result;
}
//求前n项和
int sum(int n){
//两个变量,一个求和,一个遍历
int sum=0;
int i;
//遍历求和
for(i=0;i<=n;i++){
sum+=i;
}
//输出
printf("前n项和为%d\n",sum);
//返回
return sum;
}