算法题目---从1到n整数中1出现的次数
来源:互联网 发布:哪个mac地址 win10 编辑:程序博客网 时间:2024/06/14 02:05
输入一个整数n,求从1到这n个整数的十进制表示中1出现的次数。
int NumberOf1(unsigned int n)
{
int number = 0;
while(n)
{
if(n % 10 == 1)
number++;
n = n /10;
}
return number;
}
int NubmerOf1BetweenAndN_1(unsigned int n)
{
int number = 0;
for(unsigned int i = 1;i <= n;++i)
number += NumberOf1(i);
return number;
}
int PowerBase10(unsigned int n)
{
int result = 1;
for(unsigned int i = 0;i < n; ++i)
result *= 10;
return result;
}
int NumberOf2(const char *strN)
{
if(!strN || *strN < '0' || *strN > '9' || *strN == '\0')
return 0;
int first = *strN - '0';
unsigned int length = static_cast<unsigned int >(strlen(strN));
if(length == 1 && first == 0)
return 0;
if(length == 1 && first > 0)
return 1;
int numFirstDigit = 0;
if(first > 1)
numFirstDigit = PowerBase10(length - 1);
else if(first == 1)
numFirstDigit = atoi(strN+1)+1;
int numOtherDigits = first*(length -1 )* PowerBase10(length -2 );
int numRecurive = NumberOf2(strN +1);
return numFirstDigit + numOtherDigits + numRecurive;
}
int NubmerOf1BetweenAndN_2(unsigned int n)
{
if(n < 0)
return 0;
char strN[50];
sprintf(strN,"%d",n);
return NumberOf2(strN);
}
void Test(char* testName, int n, int expected)
{
if(testName != NULL)
printf("%s begins: \n", testName);
if(NubmerOf1BetweenAndN_1(n) == expected)
printf("Solution1 passed.\n");
else
printf("Solution1 failed.\n");
if(NubmerOf1BetweenAndN_2(n) == expected)
printf("Solution2 passed.\n");
else
printf("Solution2 failed.\n");
printf("\n");
}
void Test()
{
Test("Test1", 1, 1);
Test("Test2", 5, 1);
Test("Test3", 10, 2);
Test("Test4", 55, 16);
Test("Test5", 99, 20);
Test("Test6", 10000, 4001);
Test("Test7", 21345, 18821);
Test("Test8", 0, 0);
}
int main()
{
Test();
return 0;
}
- 算法题目---从1到n整数中1出现的次数
- 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)
- 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)
- 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)
- 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)
- 整数中1出现的次数(从1到n整数中1出现的次数)(算法)
- 整数中1出现的次数(从1到n整数中1出现的次数)
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- HDU 6035 树形dp
- linux系统下如何挂载NTFS移动硬盘
- CSS字体样式
- 第19篇:ng-repeat循环字符串转换成的对象的过滤器
- Heartbeat+Haproxy实现负载均衡高可用
- 算法题目---从1到n整数中1出现的次数
- 前端也可以学习UI
- Ubuntu下设置环境变量及PATH的方法
- JAVA 中遍历Map的4种方法
- uva 11609
- 基于opencv的车牌识别(三)车牌ROI提取,字符分割及识别
- redis之sorted-set指令
- 一起学Java_Eclipse开发工具介绍及equals、toString方法的重写equals
- 工作中的犯过的错误总结