*浙大PAT甲级 1049
2016-08-22 21:50
337 查看
对于给定的数abcd,分三种情况。
(1)最后一位数d出现1的次数,若d==0,则出现的次数为abc次;若d>=1,则个位出现1的次数为abc+1。
(2)首位数a出现1的次数,若d==1,则出现1的次数为bcd+1此,若d>1,则出现1的次数为10^(数的个数-1)。
(3)除首尾(b|c)出现1的次数,这里已b为说明,若b==0,则出现1的次数为a*100;若b==1,则出现1的次数为a*100+cd+1;若b>1,则出现1的次数为(a+1)*100。
全部相加,即得结果。
AC代码:
#include<iostream>
#include<vector>
#include<map>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#include<list>
#include<set>
#include<cmath>
#define inf 26*26*26*10+5
using namespace std;
int main()
{
string s;
cin>>s;
int sum=0;
int d=1;
//cout<<s.size()<<endl;
for(int i=0;i<s.size();i++)
{
sum*=10;
sum+=s[i]-'0';
}
//cout<<sum<<endl;
int ans=0;
int ff;
for(int i=s.size()-1;i>=0;i--)
{
if(i==s.size()-1)
{
ff=1;
}
else
{
ff*=10;
}
if(i==s.size()-1)
{
if(s[i]=='0')
{
ans+=sum/10;
}
else
{
ans+=sum/10+1;
//cout<<ans<<endl;
}
}
else if(i==0)
{
if(s[i]=='1')
{
ans+=sum-ff+1;
//cout<<ans<<endl;
}
else
{
ans+=ff;
// cout<<ans<<endl;
}
}
else
{
if(s[i]=='0')
{
ans+=sum/(ff*10)*ff;
}
else if(s[i]=='1')
{
ans+=sum/(ff*10)*ff+sum%ff+1;
}
else
{
ans+=(sum/(ff*10)+1)*ff;
}
//cout<<ans<<endl;
}
}
cout<<ans<<endl;
}
(1)最后一位数d出现1的次数,若d==0,则出现的次数为abc次;若d>=1,则个位出现1的次数为abc+1。
(2)首位数a出现1的次数,若d==1,则出现1的次数为bcd+1此,若d>1,则出现1的次数为10^(数的个数-1)。
(3)除首尾(b|c)出现1的次数,这里已b为说明,若b==0,则出现1的次数为a*100;若b==1,则出现1的次数为a*100+cd+1;若b>1,则出现1的次数为(a+1)*100。
全部相加,即得结果。
AC代码:
#include<iostream>
#include<vector>
#include<map>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#include<list>
#include<set>
#include<cmath>
#define inf 26*26*26*10+5
using namespace std;
int main()
{
string s;
cin>>s;
int sum=0;
int d=1;
//cout<<s.size()<<endl;
for(int i=0;i<s.size();i++)
{
sum*=10;
sum+=s[i]-'0';
}
//cout<<sum<<endl;
int ans=0;
int ff;
for(int i=s.size()-1;i>=0;i--)
{
if(i==s.size()-1)
{
ff=1;
}
else
{
ff*=10;
}
if(i==s.size()-1)
{
if(s[i]=='0')
{
ans+=sum/10;
}
else
{
ans+=sum/10+1;
//cout<<ans<<endl;
}
}
else if(i==0)
{
if(s[i]=='1')
{
ans+=sum-ff+1;
//cout<<ans<<endl;
}
else
{
ans+=ff;
// cout<<ans<<endl;
}
}
else
{
if(s[i]=='0')
{
ans+=sum/(ff*10)*ff;
}
else if(s[i]=='1')
{
ans+=sum/(ff*10)*ff+sum%ff+1;
}
else
{
ans+=(sum/(ff*10)+1)*ff;
}
//cout<<ans<<endl;
}
}
cout<<ans<<endl;
}
相关文章推荐
- Excel 、数据库 一言不合就转换
- 【HDU 1059 Dividing 多重背包 】
- 监听来电和去电号码
- 【我的Android进阶之旅】Android Studio如何轻松整理字符串到string.xml中
- LogCat的使用
- iOS 开发中你是否遇到这些经验问题
- Anroid——数据库SQLite——SQLiteOpenHelper+SQLiteDatabase
- Activity生命周期实践记录(一)
- CodeForces 653A Bear and Three Balls 【sort+去重(unique)】
- SpringMVC深度探险(二) —— SpringMVC概览
- 插入排序及其算法分析
- 43. Multiply Strings(重要)
- 标准学生类和手机类
- 2016.08.22
- JIT与JVM的三种执行模式:解释模式、编译模式、混合模式
- CVE-2013-3893
- 【挖坑记】JZOJ 4726 种花
- mysql表内关联
- Light OJ 1031 区间dp
- Java 内存区域和GC机制