计算1到n整数中,字符ch出现的次数
2024-10-19 06:19:31
个位ch个数 + 十位ch个数 * 10 + 百位ch个数 * 100;同时如果某一位刚好等于ch,还需要减去多算的一部分值。
#include <stdio.h> //整数1到n,字符ch出现的次数;如1到12,1出现5次
int count1s (int n, char ch){
int i = ch - '0';
int count = 0;
int j = 1;
int m = n;
int t = 0;
int k = 1; if (i == 0) i = 10;
//循环比较最后一位,/10 移位
while (m > 0){
int t = i;
int count1 = 0;
while (t <= m){
count1++;
t += 10;
}
count += count1 * j;
j *= 10;
m /= 10;
} //减去多加的部分; 如110中计算1出现个数,在计算十位时多加9,需要减去。在计算百位是也多加了89,需要减去
m = n;
j = 0; while (m){
if (m % 10 == ch - '0'){
j = t;
if (j != 0){
int a = 0;
k = 1;
for (a = 0; a < j; a++) k *= 10;
count = count - (k - (n % k) - 1);
}
}
m /= 10;
t++;
} return count;
} #if 1 //普通的逐个整数比较的测试程序 //某个整数中1出现的次数
int NumberOfCh(unsigned int n, char ch)
{
int number = 0;
while (n)
{
if(n % 10 == ch - '0')
number ++;
n = n / 10;
} return number;
} //求1到n中所有整数中1出现的总次数
int ceshi(unsigned int n, char ch)
{
int number = 0;
int i = 1;
for(i = 1; i <= n; ++ i)
number += NumberOfCh(i, ch); return number;
}
#endif int main (void){
#if 0
int i = 0;
char ch = '0';
for (i = 0; i < 65535; i++){
for (ch = '0'; ch <= '9'; ch++){
if (count1s (i, ch) != ceshi (i, ch)){
printf ("%d %c\n", i, ch);
return -1;
}
}
printf ("%d\n", i);
}
#else
printf ("%d\n", count1s(1365535, '5')); printf ("%d\n", ceshi (1365535, '5')); #endif
}
最新文章
- quartz集群分布式(并发)部署解决方案-Spring
- Struts2批量验证(POC)
- man curl_easy_perform(原创)
- Unity3D默认的快捷键
- Delphi七个版本
- 自己随意写了个简单的依赖jquery的轮播图
- RTO &; RPO
- WebDriver使用指南(完整篇)
- iOS 通过代码关闭应用程序
- POJ 3191 The Moronic Cowmpouter(进制转换)
- php最短的HTTP响应代码
- Android Animation初识
- 大数相加a+b
- MySQL之数据的备份与还原
- maven 执行mvn package/clean命令出错
- centos下安装djangobb
- DataTables 1.10.x与1.9.x参数名对照表
- 【go】http实验
- H5音乐播放器【歌单列表】
- [转发]VMware厚置备延迟置零 、 厚置备置零、精简置备 区别