输出正整数a的位数……待提高
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
typedef long long ll;//方便
char ser1[200]="算法如下:\nll digit1(ll a)//方法1 \n{\n static int b=-1;\n ll k;\n b++;\n if(a==0)\n {\n k=b;\n b=-1;\n return k;\n }\n else\n {\n return digit1(a/10);\n }\n}";
char ser2[200]="算法如下:\nll digit2(ll a)//方法2 \n{\n return (int)log10(a)+1;//简单函数 \n}";
char ser3[200]="算法如下:\nll digit3(ll a)//方法3 \n{\n char str[25];\n sprintf(str,\"%lld\",a);//字符串长度计算 \n return strlen(str);\n}";
char ser4[200]="算法如下:\nll digit4()//方法4 \n{\n int n=0,a;\n char ch;\n getchar(); \n while(1)\n {\n ch=getchar();\n if(ch=='\n')break;\n else n++;\n }\n return n;\n}";
char ser5[200]="算法如下:\nll digit5(ll a)//类似于方法一 \n{\n int i;\n for(i=0;a!=0;a/=10,i++);\n return i;\n}";
ll digit1(ll a)//方法1
{
static int b=-1;
ll k;
b++;
if(a==0)//如果等于0说明已经最后一位被除了
{
k=b;//记录位数
b=-1;//初始化,不影响下一次使用
return k;//返回
}
else
{
return digit1(a/10);
}
}
ll digit2(ll a)//方法2
{
return (int)log10(a)+1;//简单函数
}
ll digit3(ll a)//方法3
{
char str[25];
sprintf(str,"%lld",a);//字符串长度计算
return strlen(str);
}
ll digit4()//方法4
{
int n=0,a;
char ch;
getchar();
while(1)
{
ch=getchar();
if(ch=='\n')break;
else n++;
}
return n;
}
ll digit5(ll a)//类似于方法一
{
int i;
for(i=0;a!=0;a/=10,i++);
return i;
}
int main()
{
ll a,b;
while(1)
{
printf("选择一种方法来计算正整数位数,待提高\n\n");
printf("----------------------------\n");
printf("--1.n一直除以十(while) --\n");
printf("--2.log10函数 --\n") ;
printf("--3.转为字符串形式 --\n");
printf("--4.getchar()边输边记 --\n");
printf("--5.与方法1.类似(for) --\n");
printf("--6.退出 --\n");
printf("----------------------------\n");
int n;
scanf("%d",&n);
ll aa;
switch (n)
{
case 1:{
printf("请您输入一个20位以下的正整数:\n");
scanf("%lld",&a);
aa=digit1(a);
puts(ser1);puts("计算结果为:");
break;
}
case 2:{
printf("请您输入一个20位以下的正整数:\n");
scanf("%lld",&a);
aa=digit2(a);
puts(ser2);puts("计算结果为:");
break;
}
case 3:{
printf("请您输入一个20位以下的正整数:\n");
scanf("%lld",&a);
aa=digit3(a);
puts(ser3);puts("计算结果为:");
break;
}
case 4:{
printf("请您输入一个20位以下的正整数:\n");
aa=digit4();
puts(ser4);puts("计算结果为:");
break;
}
case 5:{
printf("请您输入一个20位以下的正整数:\n");
scanf("%lld",&a);
aa=digit5(a);
puts(ser5);puts("计算结果为:");
break;
}
case 6:{
return 0;
break;
}
}
printf("它的位数是:%d\n--------------------\n",aa);
system("pause");//暂停
system("cls");//清屏
}
}