从1到n整数x出现的次数

来源:互联网 发布:html标签id使用js变量 编辑:程序博客网 时间:2024/06/06 05:50
/* * 统计1到n的整数中x(x可以是1~9的数)出现的次数 */#include <iostream>using namespace std;intsolve(unsigned int n, int x);   /* 根据数字规律,效率较高的算法实现 */intsolve2(unsigned int n, int x);  /* 遍历所有整数的实现,n较大时极端低效 */intmain(void){int x;cin>>x;     /*x可以是1-9的整数*/for (unsigned int i = 0; i < 10000; ++i)if (solve(i, x) != solve2(i, x)) {cout<<"solve("<<i<<") = "<<solve(i, x)<<endl;cout<<"solve2("<<i<<") = "<<solve2(i, x)<<endl;break;}return 0;}intsolve(unsigned int n, int x) {if (x <= 0 || x > 9)return -1;int sum = 0;int k;  //int num;int dex = 0;int sex = 1;int sub = 0;while (n) {k = n % 10;sum += k * dex;if (k == x) sum += sub + 1;else if (k > x)sum += sex;sub += k * sex;dex = 10 * dex + sex;sex *= 10;n /= 10;}return sum;}int single(unsigned int n, int x){int num = 0;int k;while (n != 0) {k = n % 10;if (k == x)++num;n = n / 10;}return num;}int solve2(unsigned int n, int x){if (x <= 0 || x > 9)return -1;int sum = 0;for (int i = 1; i <= n; ++i)sum += single(i, x);return sum;}

0 0
原创粉丝点击