目录
使用数学逻辑和循环编写代码。 以下代码可以满分通过。
首先将题目分解,逐个完成然后再将代码组合在一起。
给出一个不多于5位的整数,
1、求出它是几位数
2、分别输出每一位数字,使用空格隔开
3、按逆序输出各位数字
1.求出它是几位数,使用整除10查看结果是否为0的循环。
//baizhen
#include <stdio.h>
int main(void)
{
int a,i;
scanf("%d",&a);
for(i=0;a!=0;i++) //如果整除10的结果不为0,计数器就加一
a=a/10;
printf("%d\n",i);
return 0;
}
2、分别输出每一位数字,使用空格隔开
//baizhen
#include <stdio.h>
#include <math.h>
int main(void)
{
int a,i,aa;
scanf("%d",&a);
aa=a;
for(i=0;a!=0;i++)
a=a/10;
printf("%d\n",i);
for(;i!=0;i--)
printf("%d ",aa%(int)pow(10,i)/(int)pow(10,i-1)); //pow之前要加int进行强制类型转换,不然不满足题目要求。
return 0;
}
核心思想是向上取余向下取整,比如求12345的第三位 12345%1000=345 (int)345/100=3 通过数学函数调整10的i次方就可以取出任意位数。
3.按逆序输出各位数字
//baizhen
#include <stdio.h>
#include <math.h>
int main(void)
{
int a,i,aa,ii;
scanf("%d",&a);
aa=a;
for(i=0;a!=0;i++)
a=a/10;
printf("%d\n",i);
ii=i;
for(;i!=0;i--)
printf("%d ",aa%(int)pow(10,i)/(int)pow(10,i-1));
printf("\n");
for(int x=1;x<=ii;x++)
printf("%d",aa%(int)pow(10,x)/(int)pow(10,x-1));
return 0;
}
使用if逐句判断编写代码,以下代码可以满分通过。
//lijiarui算法(doge)
#include<stdio.h>
int main()
{
int a,b,c,d,e,f;
scanf("%d",&a);
if(a>9999)
{printf("5\n");
b=a/10000;
c=(a%10000)/1000;
d=((a%10000)%1000)/100;
e=(((a%10000)%1000)%100)/10;
f=(((a%10000)%1000)%100)%10;
printf("%d %d %d %d %d\n",b,c,d,e,f);
printf("%d%d%d%d%d",f,e,d,c,b);
}
if(a<=9999 && a>999)
{printf("4\n");
b=a/1000;
c=(a%1000)/100;
d=((a%1000)%100)/10;
e=((a%1000)%100)%10;
printf("%d %d %d %d\n",b,c,d,e);
printf("%d%d%d%d",e,d,c,b);
}
if(a<=999 && a>99)
{printf("3\n");
b=a%100;
c=(a%100)/10;
d=(a%100)%10;
printf("%d %d %d\n",b,c,d);
printf("%d%d%d",d,c,b);
}
if(a<=99 && a>9)
{printf("2\n");
b=a%10;
c=a/10;
printf("%d %d\n",b,c);
printf("%d%d",c,b);
}
if(a<9)
{printf("1\n%d\n%d",a,a);
}
return 0;
}
~
使用数组编写代码,以下代码可以满分通过。
//baizhen
#include <stdio.h>
#include <string.h>
int main(void)
{
char a[10];
scanf("%s",a);
long b=strlen(a);
printf("%ld\n",b);
for(int i=0;i<b;i++)
{
printf("%c",a[i]);
if(i>=0&&i<b-1)
printf(" ");
}
printf("\n");
for(int i=0;i<=b;i++)
{
printf("%c",a[b-i]);
}
return 0;
}