求一个整数中的相同的数字
如输入123456321,输出 1 2 3.
思路:首先求出输入整数的位数,然后设置两个数组。a数组存放整数中各个数字,b数组存放各个数字出现的次数。
由于int类型数字长度的限制,输入数字太大如11位数等会出现错误,欢迎指出改进之处
C代码如下:
#include <stdio.h>
int main()
{
int flag(int a[],int num,int n);//判断num在a数组中从a[0]至a[n-1]是否出现过
int num,temp;
int a[10]={0},b[10]={1},i;
printf("请输入num:");
scanf("%d",&num);
temp=num;
for(i=1;temp/10!=0;i++)
temp/=10;
printf("num的位数是%d\n",i);//循环求出输入整数的位数
for(int j=0,temp=num;j<i;j++,temp/=10)
a[j]=temp%10;//将各个数字存放至a数组中
for(int j=1;j<i;j++)
{
int k;
k=flag(a,a[j],j);
if(k>=0) b[k]+=1;//若k不为-1则说明在a[k]处次数字已经出现过
else b[j]=1;//若之前没有出现过则将b[k]置为1,说明出现了1次
}
for(int j=0;j<10;j++)
if(b[j]>1) printf("%d ",a[j]);//b[j]>1,说明数字出现不止一次,输出该数字
return 0;
}
int flag(int a[],int num,int n)
{
for(int i=0;i<n;i++)
if(a[i] == num) return i;
return -1;
}
示例运行结果如下:
求一个由数字组成的字符串中相同数字出现次数
C代码如下:
#include <stdio.h>
int main()
{
char str[50];
int b[10]={0};
printf("请输入由数字组成的字符串,(最多50个):");
gets(str);
printf("str=%s\n",str);
for(int i=0;str[i]!='\0';i++)
switch(str[i])
{
case'0':b[0]++;break;
case'1':b[1]++;break;
case'2':b[2]++;break;
case'3':b[3]++;break;
case'4':b[4]++;break;
case'5':b[5]++;break;
case'6':b[6]++;break;
case'7':b[7]++;break;
case'8':b[8]++;break;
case'9':b[9]++;break;
}
for(int i=0;i<10;i++)
printf("%d出现%d次\n",i,b[i]);
return 0;
}
示例运行结果如下: