user-0 提问: 统计个位数字    C语言

回复:
user: user-1
content: #include <stdio.h> int geshu(int M, int N); int main(void){ 	int M, N,A; 	scanf("%d %d", &M, &N); 	A=geshu(M,N); 	printf("%d这个数中有%d个%d\n", M, A, N); 	return 0; } int geshu(int M,int N) { 	int ret=0; 	int ge = 0; 	while (M > 0){ 		ret = M % 10; 		M = M / 10; 		if (ret == N){ 			ge++; 		} 	} 		return ge; }

user: user-0
content: 引用 13 楼 早打大打打核战争 的回复:简单的方法：  #include <stdio.h>  int main() {   int n, d, x;    scanf("%d%d", &n, &d);   for (x = n < 0 ? n = ~n + 1, 0 : n | d ? 0 : 1; n; x += (n % 10) == d, n /= 10);   printf("%d\n", x);    return 0; }   求大佬教教我  方法真的很好

user: user-0
content: 引用 14 楼 夜太美。 的回复:[quote=引用 13 楼 早打大打打核战争 的回复:] 简单的方法：  #include <stdio.h>  int main() {   int n, d, x;    scanf("%d%d", &n, &d);   for (x = n < 0 ? n = ~n + 1, 0 : n | d ? 0 : 1; n; x += (n % 10) == d, n /= 10);   printf("%d\n", x);    return 0; }   看不懂啥意思啊 [/quote]  for循环里什么意思啊

user: user-0
content: 引用 13 楼 早打大打打核战争 的回复:简单的方法：  #include <stdio.h>  int main() {   int n, d, x;    scanf("%d%d", &n, &d);   for (x = n < 0 ? n = ~n + 1, 0 : n | d ? 0 : 1; n; x += (n % 10) == d, n /= 10);   printf("%d\n", x);    return 0; }   看不懂啥意思啊

user: user-2
content: 简单的方法：  #include <stdio.h>  int main() {   int n, d, x;    scanf("%d%d", &n, &d);   for (x = n < 0 ? n = ~n + 1, 0 : n | d ? 0 : 1; n; x += (n % 10) == d, n /= 10);   printf("%d\n", x);    return 0; }

user: user-3
content: N=0 D=0的时候特殊处理下不就行了。。。 引用 11 楼 夜太美。 的回复:[quote=引用 1 楼 自信男孩 的回复:] 注意若输入：-21252 2，那么-21252 % 10之后得到是-2，而不是2.  #include <stdio.h>  int Count_Digit (int N,int D);  int main() {     int N, D;      scanf("%d %d", &N, &D);     printf("%d\n", Count_Digit(N, D));     return 0; }  int Count_Digit (int num, int key ) { #if 1     int cnt = 0;      if (num < 0)         num = -num;     if (key < 0)         key = -key;      while (num) {         if (num % 10 == key)             cnt++;         num /= 10;     }      return cnt; #else     int a=1;     int D1=0;     D1=N;     for(;D!=D1;)     {         if(D1>0)         {             if(D==(D1%10))             {                 a++;             }             D=(D1/10);             D1=D;         }         else         {             if((-D)==(D1%10))             {                 a++;             }             D=-(D1/10);             D1=(-D);         }     }     return a; #endif }   供参考！    这个问题怎么解决？？  测试点2是错的   测试点	提示	结果	耗时	内存 0	sample, 数字<0且不连续出现	答案正确	2 ms	384 KB 1	数字>0，有连续出现	答案正确	2 ms	288 KB 2	N=0，且输出1	答案错误	1 ms	372 KB 3	输出为0	答案正确	1 ms	256 KB 4	统计0的次数，可能循环会多1	答案正确	1 ms	360 KB   代码这样写的 int Count_Digit (int num, int key ) {     int cnt = 0;     if (num < 0)         num = -num;     if (key < 0)         key = -key;     while (num) 	{         if (num % 10 == key)             cnt++;         num /= 10;     }     return cnt; }  引用 1 楼 自信男孩 的回复:注意若输入：-21252 2，那么-21252 % 10之后得到是-2，而不是2.  #include <stdio.h>  int Count_Digit (int N,int D);  int main() {     int N, D;      scanf("%d %d", &N, &D);     printf("%d\n", Count_Digit(N, D));     return 0; }  int Count_Digit (int num, int key ) { #if 1     int cnt = 0;      if (num < 0)         num = -num;     if (key < 0)         key = -key;      while (num) {         if (num % 10 == key)             cnt++;         num /= 10;     }      return cnt; #else     int a=1;     int D1=0;     D1=N;     for(;D!=D1;)     {         if(D1>0)         {             if(D==(D1%10))             {                 a++;             }             D=(D1/10);             D1=D;         }         else         {             if((-D)==(D1%10))             {                 a++;             }             D=-(D1/10);             D1=(-D);         }     }     return a; #endif }   供参考！   这个问题怎么解决？？  测试点2是错的   测试点	提示	结果	耗时	内存 0	sample, 数字<0且不连续出现	答案正确	2 ms	384 KB 1	数字>0，有连续出现	答案正确	2 ms	288 KB 2	N=0，且输出1	答案错误	1 ms	372 KB 3	输出为0	答案正确	1 ms	256 KB 4	统计0的次数，可能循环会多1	答案正确	1 ms	360 KB   代码这样写的 int Count_Digit (int num, int key ) {     int cnt = 0;     if (num < 0)         num = -num;     if (key < 0)         key = -key;     while (num) 	{         if (num % 10 == key)             cnt++;         num /= 10;     }     return cnt; }  引用 6 楼 夜太美。 的回复:[quote=引用 1 楼 自信男孩 的回复:] 注意若输入：-21252 2，那么-21252 % 10之后得到是-2，而不是2.  #include <stdio.h>  int Count_Digit (int N,int D);  int main() {     int N, D;      scanf("%d %d", &N, &D);     printf("%d\n", Count_Digit(N, D));     return 0; }  int Count_Digit (int num, int key ) { #if 1     int cnt = 0;      if (num < 0)         num = -num;     if (key < 0)         key = -key;      while (num) {         if (num % 10 == key)             cnt++;         num /= 10;     }      return cnt; #else     int a=1;     int D1=0;     D1=N;     for(;D!=D1;)     {         if(D1>0)         {             if(D==(D1%10))             {                 a++;             }             D=(D1/10);             D1=D;         }         else         {             if((-D)==(D1%10))             {                 a++;             }             D=-(D1/10);             D1=(-D);         }     }     return a; #endif }   供参考！   谢谢谢谢   虽然不懂那个 #if  #else #endif  啥意思[/quote]    这个问题怎么解决？？  测试点2是错的   测试点	提示	结果	耗时	内存 0	sample, 数字<0且不连续出现	答案正确	2 ms	384 KB 1	数字>0，有连续出现	答案正确	2 ms	288 KB 2	N=0，且输出1	答案错误	1 ms	372 KB 3	输出为0	答案正确	1 ms	256 KB 4	统计0的次数，可能循环会多1	答案正确	1 ms	360 KB   代码这样写的 int Count_Digit (int num, int key ) {     int cnt = 0;     if (num < 0)         num = -num;     if (key < 0)         key = -key;     while (num) 	{         if (num % 10 == key)             cnt++;         num /= 10;     }     return cnt; }[/quote]

user: user-4
content: 引用 9 楼 jiamianshiye_16_com 的回复:0-9都给你统计了。  #include <stdio.h> #include <stdlib.h> #include <string.h>  #define MAX_CHAR_TYPES	10  unsigned int g_charnum[MAX_CHAR_TYPES];   int main(int argc, char *argv[]) { 	int i = 0;  	if(argc <= 1) 	{ 		printf("Usage : ./a.out stringXXXXX\n");	 		return -1; 	}  	char *ptmp = argv[1];	 	int len = strlen(ptmp); 	for(i = 0; i < len; i++) 	{ 		if(ptmp[i] >= '0' && ptmp[i] <= '9')	 		{ 			g_charnum[ptmp[i] - '0']++; 			continue; 		} 	} 	for(i = 0; i < MAX_CHAR_TYPES; i++) 	{ 		printf("idx:%d--%d\n", i, g_charnum[i]);	 	}  	return 0; } ./a.out  0123456789987654321 idx:0--1 idx:1--2 idx:2--2 idx:3--2 idx:4--2 idx:5--2 idx:6--2 idx:7--2 idx:8--2 idx:9--   #include <stdio.h> #include <stdlib.h> #include <string.h>  #define MAX_CHAR_TYPES	10  unsigned int g_charnum[MAX_CHAR_TYPES];   int main(int argc, char *argv[]) { 	int i = 0;  	if(argc <= 1) 	{ 		printf("Usage : ./a.out stringXXXXX\n");	 		return -1; 	}  	char *ptmp = argv[1];	 	int len = strlen(ptmp); 	for(i = 0; i < len; i++) 	{ 		if(ptmp[i] >= '0' && ptmp[i] <= '9')	 		{ 			g_charnum[ptmp[i] - '0']++; 		} 	} 	for(i = 0; i < MAX_CHAR_TYPES; i++) 	{ 		printf("idx:%d--%d\n", i, g_charnum[i]);	 	}  	return 0; } ./a.out  0123456789987654321 idx:0--1 idx:1--2 idx:2--2 idx:3--2 idx:4--2 idx:5--2 idx:6--2 idx:7--2 idx:8--2 idx:9--2    以这个代码为准。

user: user-4
content: 0-9都给你统计了。  #include <stdio.h> #include <stdlib.h> #include <string.h>  #define MAX_CHAR_TYPES	10  unsigned int g_charnum[MAX_CHAR_TYPES];   int main(int argc, char *argv[]) { 	int i = 0;  	if(argc <= 1) 	{ 		printf("Usage : ./a.out stringXXXXX\n");	 		return -1; 	}  	char *ptmp = argv[1];	 	int len = strlen(ptmp); 	for(i = 0; i < len; i++) 	{ 		if(ptmp[i] >= '0' && ptmp[i] <= '9')	 		{ 			g_charnum[ptmp[i] - '0']++; 			continue; 		} 	} 	for(i = 0; i < MAX_CHAR_TYPES; i++) 	{ 		printf("idx:%d--%d\n", i, g_charnum[i]);	 	}  	return 0; } ./a.out  0123456789987654321 idx:0--1 idx:1--2 idx:2--2 idx:3--2 idx:4--2 idx:5--2 idx:6--2 idx:7--2 idx:8--2 idx:9--

user: user-0
content: 引用 7 楼 636f6c696e的回复:因为转成字符串后，数字2变成字符'2'了，需要转换 [quote=引用 4 楼 夜太美。 的回复:] [quote=引用 2 楼 636f6c696e 的回复:] 直接转成字符串比较也挺方便的 #include <stdio.h>  int main() {     char str[100];     int num, digit, i, count = 0;     scanf("%d %d", &num, &digit);     sprintf(str, "%d", num);     for (i = 0; i < 100; i++)     {         if (str[i] == '\0')             break;         if (str[i] == digit + '0')             count++;      }     printf("count=%d\n", count);     return 0; }    这个if (str[i] == digit +'0')    digit  为啥要加‘0’？[/quote][/quote] 哦哦，只允许这样转换吗？有其他方法吗？

user: user-3
content: 因为转成字符串后，数字2变成字符'2'了，需要转换 引用 4 楼 夜太美。 的回复:[quote=引用 2 楼 636f6c696e 的回复:] 直接转成字符串比较也挺方便的 #include <stdio.h>  int main() {     char str[100];     int num, digit, i, count = 0;     scanf("%d %d", &num, &digit);     sprintf(str, "%d", num);     for (i = 0; i < 100; i++)     {         if (str[i] == '\0')             break;         if (str[i] == digit + '0')             count++;      }     printf("count=%d\n", count);     return 0; }    这个if (str[i] == digit +'0')    digit  为啥要加‘0’？[/quote]

user: user-0
content: 引用 1 楼 自信男孩 的回复:注意若输入：-21252 2，那么-21252 % 10之后得到是-2，而不是2.  #include <stdio.h>  int Count_Digit (int N,int D);  int main() {     int N, D;      scanf("%d %d", &N, &D);     printf("%d\n", Count_Digit(N, D));     return 0; }  int Count_Digit (int num, int key ) { #if 1     int cnt = 0;      if (num < 0)         num = -num;     if (key < 0)         key = -key;      while (num) {         if (num % 10 == key)             cnt++;         num /= 10;     }      return cnt; #else     int a=1;     int D1=0;     D1=N;     for(;D!=D1;)     {         if(D1>0)         {             if(D==(D1%10))             {                 a++;             }             D=(D1/10);             D1=D;         }         else         {             if((-D)==(D1%10))             {                 a++;             }             D=-(D1/10);             D1=(-D);         }     }     return a; #endif }   供参考！    这个问题怎么解决？？  测试点2是错的   测试点	提示	结果	耗时	内存 0	sample, 数字<0且不连续出现	答案正确	2 ms	384 KB 1	数字>0，有连续出现	答案正确	2 ms	288 KB 2	N=0，且输出1	答案错误	1 ms	372 KB 3	输出为0	答案正确	1 ms	256 KB 4	统计0的次数，可能循环会多1	答案正确	1 ms	360 KB   代码这样写的 int Count_Digit (int num, int key ) {     int cnt = 0;     if (num < 0)         num = -num;     if (key < 0)         key = -key;     while (num) 	{         if (num % 10 == key)             cnt++;         num /= 10;     }     return cnt; }  引用 1 楼 自信男孩 的回复:注意若输入：-21252 2，那么-21252 % 10之后得到是-2，而不是2.  #include <stdio.h>  int Count_Digit (int N,int D);  int main() {     int N, D;      scanf("%d %d", &N, &D);     printf("%d\n", Count_Digit(N, D));     return 0; }  int Count_Digit (int num, int key ) { #if 1     int cnt = 0;      if (num < 0)         num = -num;     if (key < 0)         key = -key;      while (num) {         if (num % 10 == key)             cnt++;         num /= 10;     }      return cnt; #else     int a=1;     int D1=0;     D1=N;     for(;D!=D1;)     {         if(D1>0)         {             if(D==(D1%10))             {                 a++;             }             D=(D1/10);             D1=D;         }         else         {             if((-D)==(D1%10))             {                 a++;             }             D=-(D1/10);             D1=(-D);         }     }     return a; #endif }   供参考！   这个问题怎么解决？？  测试点2是错的   测试点	提示	结果	耗时	内存 0	sample, 数字<0且不连续出现	答案正确	2 ms	384 KB 1	数字>0，有连续出现	答案正确	2 ms	288 KB 2	N=0，且输出1	答案错误	1 ms	372 KB 3	输出为0	答案正确	1 ms	256 KB 4	统计0的次数，可能循环会多1	答案正确	1 ms	360 KB   代码这样写的 int Count_Digit (int num, int key ) {     int cnt = 0;     if (num < 0)         num = -num;     if (key < 0)         key = -key;     while (num) 	{         if (num % 10 == key)             cnt++;         num /= 10;     }     return cnt; }  引用 6 楼 夜太美。 的回复:[quote=引用 1 楼 自信男孩 的回复:] 注意若输入：-21252 2，那么-21252 % 10之后得到是-2，而不是2.  #include <stdio.h>  int Count_Digit (int N,int D);  int main() {     int N, D;      scanf("%d %d", &N, &D);     printf("%d\n", Count_Digit(N, D));     return 0; }  int Count_Digit (int num, int key ) { #if 1     int cnt = 0;      if (num < 0)         num = -num;     if (key < 0)         key = -key;      while (num) {         if (num % 10 == key)             cnt++;         num /= 10;     }      return cnt; #else     int a=1;     int D1=0;     D1=N;     for(;D!=D1;)     {         if(D1>0)         {             if(D==(D1%10))             {                 a++;             }             D=(D1/10);             D1=D;         }         else         {             if((-D)==(D1%10))             {                 a++;             }             D=-(D1/10);             D1=(-D);         }     }     return a; #endif }   供参考！   谢谢谢谢   虽然不懂那个 #if  #else #endif  啥意思[/quote]    这个问题怎么解决？？  测试点2是错的   测试点	提示	结果	耗时	内存 0	sample, 数字<0且不连续出现	答案正确	2 ms	384 KB 1	数字>0，有连续出现	答案正确	2 ms	288 KB 2	N=0，且输出1	答案错误	1 ms	372 KB 3	输出为0	答案正确	1 ms	256 KB 4	统计0的次数，可能循环会多1	答案正确	1 ms	360 KB   代码这样写的 int Count_Digit (int num, int key ) {     int cnt = 0;     if (num < 0)         num = -num;     if (key < 0)         key = -key;     while (num) 	{         if (num % 10 == key)             cnt++;         num /= 10;     }     return cnt; }

user: user-0
content: 引用 1 楼 自信男孩 的回复:注意若输入：-21252 2，那么-21252 % 10之后得到是-2，而不是2.  #include <stdio.h>  int Count_Digit (int N,int D);  int main() {     int N, D;      scanf("%d %d", &N, &D);     printf("%d\n", Count_Digit(N, D));     return 0; }  int Count_Digit (int num, int key ) { #if 1     int cnt = 0;      if (num < 0)         num = -num;     if (key < 0)         key = -key;      while (num) {         if (num % 10 == key)             cnt++;         num /= 10;     }      return cnt; #else     int a=1;     int D1=0;     D1=N;     for(;D!=D1;)     {         if(D1>0)         {             if(D==(D1%10))             {                 a++;             }             D=(D1/10);             D1=D;         }         else         {             if((-D)==(D1%10))             {                 a++;             }             D=-(D1/10);             D1=(-D);         }     }     return a; #endif }   供参考！   谢谢谢谢   虽然不懂那个 #if  #else #endif  啥意思

user: user-0
content: 引用 3 楼 海鸥的泪眸 的回复:#include<stdio.h> int main() { 	char num[100]; 	char number[10]={0}; 	int scan_num; 	int i=0; 	int j=0; 	printf("请输如一个整数（小数部分自动忽略）："); 	scanf("%d",&scan_num); 	printf("\n输入的整数为：%d\n\n",scan_num); 	if(scan_num<0) 	{ 		scan_num=-scan_num; 	} 	while(scan_num/10>0) 	{ 		num[i]=scan_num%10; 		scan_num=scan_num/10; 		i++; 	} 	num[i]=scan_num; 	printf("输入整数的位数为：%d\n\n",i+1); 	for(j;j<=i;j++) 	{ 		switch(num[j]) 		{ 			case 0: 				number[0]++; 				break; 			case 1: 				number[1]++; 				break;    			case 2: 				number[2]++; 				break;    			case 3: 				number[3]++; 				break; 			case 4: 				number[4]++; 				break; 			case 5: 				number[5]++; 				break; 			case 6: 				number[6]++; 				break; 			case 7: 				number[7]++; 				break; 			case 8: 				number[8]++; 				break; 			case 9: 				number[9]++; 				break; 			default: 				break; 		} 	} 	j=0; 	for(i=0;i<10;i++) 	{ 		if(j<number[i]) 		{ 			j=number[i]; 		} 	} 	i=0; 	while(i<10) 	{ 		i++; 		if(j==number[i-1]) 		{ 			printf("出现最多的数字是：%d\t出现了%d次\n\n",i-1,number[i-1]); 		} 	} }  谢谢谢谢

user: user-0
content: 引用 2 楼 636f6c696e 的回复:直接转成字符串比较也挺方便的 #include <stdio.h>  int main() {     char str[100];     int num, digit, i, count = 0;     scanf("%d %d", &num, &digit);     sprintf(str, "%d", num);     for (i = 0; i < 100; i++)     {         if (str[i] == '\0')             break;         if (str[i] == digit + '0')             count++;      }     printf("count=%d\n", count);     return 0; }    这个if (str[i] == digit +'0')    digit  为啥要加‘0’？

user: user-5
content: #include<stdio.h> int main() { 	char num[100]; 	char number[10]={0}; 	int scan_num; 	int i=0; 	int j=0; 	printf("请输如一个整数（小数部分自动忽略）："); 	scanf("%d",&scan_num); 	printf("\n输入的整数为：%d\n\n",scan_num); 	if(scan_num<0) 	{ 		scan_num=-scan_num; 	} 	while(scan_num/10>0) 	{ 		num[i]=scan_num%10; 		scan_num=scan_num/10; 		i++; 	} 	num[i]=scan_num; 	printf("输入整数的位数为：%d\n\n",i+1); 	for(j;j<=i;j++) 	{ 		switch(num[j]) 		{ 			case 0: 				number[0]++; 				break; 			case 1: 				number[1]++; 				break;    			case 2: 				number[2]++; 				break;    			case 3: 				number[3]++; 				break; 			case 4: 				number[4]++; 				break; 			case 5: 				number[5]++; 				break; 			case 6: 				number[6]++; 				break; 			case 7: 				number[7]++; 				break; 			case 8: 				number[8]++; 				break; 			case 9: 				number[9]++; 				break; 			default: 				break; 		} 	} 	j=0; 	for(i=0;i<10;i++) 	{ 		if(j<number[i]) 		{ 			j=number[i]; 		} 	} 	i=0; 	while(i<10) 	{ 		i++; 		if(j==number[i-1]) 		{ 			printf("出现最多的数字是：%d\t出现了%d次\n\n",i-1,number[i-1]); 		} 	} }

user: user-3
content: 直接转成字符串比较也挺方便的 #include <stdio.h>  int main() {     char str[100];     int num, digit, i, count = 0;     scanf("%d %d", &num, &digit);     sprintf(str, "%d", num);     for (i = 0; i < 100; i++)     {         if (str[i] == '\0')             break;         if (str[i] == digit + '0')             count++;      }     printf("count=%d\n", count);     return 0; }

user: user-6
content: 注意若输入：-21252 2，那么-21252 % 10之后得到是-2，而不是2.  #include <stdio.h>  int Count_Digit (int N,int D);  int main() {     int N, D;      scanf("%d %d", &N, &D);     printf("%d\n", Count_Digit(N, D));     return 0; }  int Count_Digit (int num, int key ) { #if 1     int cnt = 0;      if (num < 0)         num = -num;     if (key < 0)         key = -key;      while (num) {         if (num % 10 == key)             cnt++;         num /= 10;     }      return cnt; #else     int a=1;     int D1=0;     D1=N;     for(;D!=D1;)     {         if(D1>0)         {             if(D==(D1%10))             {                 a++;             }             D=(D1/10);             D1=D;         }         else         {             if((-D)==(D1%10))             {                 a++;             }             D=-(D1/10);             D1=(-D);         }     }     return a; #endif }   供参考！