这是Project Euler的第17题,不要写错数字的英文QaQ
#include <vector>
#include <string>
#include<iostream>
#include<algorithm>
using namespace std;
string dfs(int i,vector<string>& vs,vector<int>& vi){
string s="";
if(i==0) return s;
for(int j=0;j<vi.size();j++){
if(i/vi[j]!=0){
if(vi[j]>=100) s+=dfs(i/vi[j],vs,vi);
s+=vs[j];
if(vi[j]>=100&&i%vi[j]>0){
s+="and";
}
if(i%vi[j]!=0) s+=dfs(i%vi[j],vs,vi);
break;
}
}
return s;
}
int main(){
vector<string> vs = {"one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen",
"fourteen","fifteen","sixteen","seventeen","eighteen","nineteen","twenty","thirty","forty","fifty",
"sixty","seventy","eighty","ninety","hundred","thousand"};
vector<int> vi = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,30,40,50,60,70,80,90,100,1000};
reverse(vs.begin(),vs.end());
reverse(vi.begin(),vi.end());
int res = 0;
for(int i=1;i<=1000;i++){
string s= dfs(i,vs,vi);
cout<<s<<endl;
res+= s.size();
}
cout<<res<<endl;
return 0;
}