浙大PAT 1049

来源:互联网 发布:海航进出口公司 知乎 编辑:程序博客网 时间:2024/05/16 10:26

//此题在编程之美上出现,微软的一道面试题目,如果用暴力枚举方法,时间太慢,应该使用数学归纳,总结出1出现的数学规律

#include<iostream>

#include<fstream>
#include<algorithm>
#include<vector>
#include<queue>
#include<math.h>
#include<string>
using namespace std;
int N;
int length=0;
int *data;
void len(int n)
{
while(n)
{
length++;
n=n/10;
}
}
void DATA(int n)
{
int i=0;
while(n)
{
data[i++]=n%10;
n=n/10;
}
}


int main()  
{  
/*ifstream fin("d:\in.txt" ); 
if (! fin.is_open())  

cout << "Error opening file";
system("pause");
exit (1); 
}*/
cin>>N;
len(N);
data=new int[length];
DATA(N);
int sum=0;
for(int i=1;i<=length;i++)
{
int left=0,middle=0,right=0;
for(int j=1;j<i;j++)
{
right=right+data[j-1]*pow(10.0,j-1);
}
middle=data[i-1];
for(int j=i+1;j<=length;j++)
{
left=left+data[j-1]*pow(10.0,j-i-1);
}
//cout<<left<<" "<<middle<<" "<<right<<endl;


if(middle==0)
{
sum=sum+left*pow(10.0,i-1);
}
else if(middle==1)
{
sum=sum+left*pow(10.0,i-1)+right+1;
}
else
{
sum=sum+(left+1)*pow(10.0,i-1);
}
}
cout<<sum;
    system("PAUSE");  
    return 0;  
}
0 0