题目1491:求1和2的个数
来源:互联网 发布:淘宝风云团队2017 编辑:程序博客网 时间:2024/06/01 08:06
题目描述:给定正整数N,函数F(N)表示小于等于N的自然数中1和2的个数之和,例如:1,2,3,4,5,6,7,8,9,10序列中1和2的个数之和为3,因此F(10)=3。输入N,求F(N)的值,1=<N<=10^100(10的100次方)若F(N)很大,则求F(N)mod20123的值。
- 输入:
输入包含多组测试数据,每组仅输入一个整数N。
- 输出:
对于每组测试数据,输出小于等于N的自然数中1和2的个数之和,且对20123取模。
- 样例输入:
1011
- 样例输出:
35
见编程之美 1的数目
#include <iostream>#include <cstring>#include <cstdio>using namespace std;char s[110];int ston(int a,int b){int x = 0;for(int i = a;i <= b;i++){x = x * 10 + s[i];x = x % 20123;}return x;}int factor(int n){int x = 1;while(n){x *= 10;x = x % 20123;n--;}return x;}int main(){while(scanf("%s",s)){int len = strlen(s);for(int i = 0; i < len; i++)s[i] -= '0';int sum = 0;for(int i = 0; i < len; i++){int highnum = ston(0,i - 1);int lowernum = ston(i + 1,len - 1);int fat = factor(len - i - 1);switch(s[i]){case 0 :sum += (2 * highnum * fat) % 20123;break;case 1:sum += (2 * highnum * fat + lowernum + 1) % 20123;break;case 2:sum += ((2 * highnum + 1) * fat + lowernum + 1) % 20123;break;default:sum += (2 * (highnum + 1) * fat) % 20123;}sum %= 20123;}cout << sum << endl;}return 0;}
- 题目1491:求1和2的个数
- 题目1491:求1和2的个数
- 【九度】题目1491:求1和2的个数
- 题目1491:求1和2的个数
- 题目1491:求1和2的个数
- 题目1491:求1和2的个数
- 九度OJ 题目1491:求1和2的个数
- 九度OJ题目1491:求1和2的个数
- 九度 oj 题目1491:求1和2的个数
- 九度OJ 1491 求1和2的个数
- 求1和2的个数 九度1491
- 九度1491 求1和2的个数
- 清华 2012 求1和2的个数
- 求2个数的最大公约数和最小公倍数
- 九度OJ 1491 清华大学2012机试 《求1和2的个数》
- 18周OJ题目利用函数模板求4个数的和
- 求1的个数
- C100-25 题目:求1+2!+3!+...+20!的和
- 大神对我说……C++大神成长之路……筒子们共勉……
- Sample of turning recursive function into non-recursive
- CentOS 6.3设置静态IP教程
- Maven 常用命令
- HDU 2016
- 题目1491:求1和2的个数
- 如何解读数码相机的直方图
- 杭电2059
- HDOJ--1213--How Many Tables【并查集】
- android学习笔记---使用AsyncTask实现异步处理,内部使用线程加Handler
- Notepad++ 代码、背景色配置
- 杂
- 【LaTeX 中文乱码,不能正常显示的解决方案,编码的常见问题和解决方案】
- Mysql创建、删除用户