#include<bits/stdc++.h>
using namespace std;
int compare(string str1,string str2)
{
if(str1.length()>str2.length()) return 1;
else if(str1.length()<str2.length()) return -1;
else return str1.compare(str2);
}
string add(string str1,string str2)
{
string str;
int len1=str1.length();
int len2=str2.length();
if(len1<len2)
{
for(int i=1;i<=len2-len1;i++)
str1="0"+str1;
}
else
{
for(int i=1;i<=len1-len2;i++)
str2="0"+str2;
}
len1=str1.length();
int cf=0;
int temp;
for(int i=len1-1;i>=0;i--)
{
temp=str1[i]-'0'+str2[i]-'0'+cf;
cf=temp/10;
temp%=10;
str=char(temp+'0')+str;
}
if(cf!=0) str=char(cf+'0')+str;
return str;
}
string sub(string str1,string str2)
{
string str;
int tmp=str1.length()-str2.length();
int cf=0;
for(int i=str2.length()-1;i>=0;i--)
{
if(str1[tmp+i]<str2[i]+cf)
{
str=char(str1[tmp+i]-str2[i]-cf+'0'+10)+str;
cf=1;
}
else
{
str=char(str1[tmp+i]-str2[i]-cf+'0')+str;
cf=0;
}
}
for(int i=tmp-1;i>=0;i--)
{
if(str1[i]-cf>='0')
{
str=char(str1[i]-cf)+str;
cf=0;
}
else
{
str=char(str1[i]-cf+10)+str;
cf=1;
}
}
str.erase(0,str.find_first_not_of('0'));
return str;
}
string mul(string str1,string str2)
{
string str;
int len1=str1.length();
int len2=str2.length();
string tempstr;
for(int i=len2-1;i>=0;i--)
{
tempstr="";
int temp=str2[i]-'0';
int t=0;
int cf=0;
if(temp!=0)
{
for(int j=1;j<=len2-1-i;j++)
tempstr+="0";
for(int j=len1-1;j>=0;j--)
{
t=(temp*(str1[j]-'0')+cf)%10;
cf=(temp*(str1[j]-'0')+cf)/10;
tempstr=char(t+'0')+tempstr;
}
if(cf!=0) tempstr=char(cf+'0')+tempstr;
}
str=add(str,tempstr);
}
str.erase(0,str.find_first_not_of('0'));
return str;
}
pair<string,string> div(string str1,string str2){
string quotient;
string residue="";
if(str2=="0")
{
return {"err","err"};
}
if(str1=="0")
{
return {"0","0"};
}
int res=compare(str1,str2);
if(res<0)
{
return {"0",str1};
}
else if(res==0)
{
return {"1","0"};
}
else
{
int len1=str1.length();
int len2=str2.length();
string tempstr;
tempstr.append(str1,0,len2-1);
for(int i=len2-1;i<len1;i++)
{
tempstr=tempstr+str1[i];
tempstr.erase(0,tempstr.find_first_not_of('0'));
if(tempstr.empty())
tempstr="0";
for(char ch='9';ch>='0';ch--)
{
string str,tmp;
str=str+ch;
tmp=mul(str2,str);
if(compare(tmp,tempstr)<=0)
{
quotient=quotient+ch;
tempstr=sub(tempstr,tmp);
break;
}
}
}
residue=tempstr;
}
quotient.erase(0,quotient.find_first_not_of('0'));
if(quotient.empty()) quotient="0";
return {quotient,residue};
}
bool Less(string str1,string str2){
if(str1.size()<str2.size()) return true;
else if(str1.size()>str2.size()) return false;
else{
for(int i=0;i<str1.size();i++){
if(str1[i]<str2[i]) return true;
else if(str1[i]>str2[i]) return false;
}
return false;
}
}
bool Greater(string str1,string str2){
if(str1.size()<str2.size()) return false;
else if(str1.size()>str2.size()) return true;
else{
for(int i=0;i<str1.size();i++){
if(str1[i]<str2[i]) return false;
else if(str1[i]>str2[i]) return true;
}
return false;
}
}
bool samegreater(string str1,string str2){
return Greater(str1,str2)||str1==str2;
}
bool sameless(string str1,string str2){
return Less(str1,str2)||str1==str2;
}
bool cmp(string a,string b){
return Less(a,b);
}
void swaps(string &a,string &b){
// string
}
string str(int x){
string s="";
while(x>0){
int b=x%10;
s=char(b)+s;
x/=10;
}
return s;
}
string a[100001];
string s;
string get(int x){
string n="0";
for(string i=add(x,"1");Less(i,str(s.size()));add(i,"1")){
if(s[i]<='9'&&s[i]>='0'){
n=mul(n,"10");
n=add(str(int(s[i]-'0')),n);
}
else{
break;
}
}
return n;
}
string N;
int main(){
string t="0";
s='+'+s;
for(string i="0";Less(i,str(s.size()));i=add(i,"1")){
if(s[i]=='+'||s[i]=='-'){
a[add("1",t)]=str(get(i));
}
}
string n;
cin>>n>>N;
for(string i="1";Less(i,n);i=add(i,"1")){
string x0;
cin>>x0;
string ans=a[1];
for(string j="2";Less(j,t);j=add(j,"1")){
ans = add(mul(ans,x0),a[j]);
ans = div(ans,N).second;
}
cout<<ans<<"\n";
}
}
这是一道给自己出的题目,用高精度做的,结果……
一堆错,看一看,发现就这两种:
[Error] no match for 'operator[]' (operand types are 'std::string {aka std::basic_string<char>}' and 'std::string {aka std::basic_string<char>}')
[Error] no match for 'operator[]' (operand types are 'std::string [100001] {aka std::basic_string<char> [100001]}' and 'std::string {aka std::basic_string<char>}')
可是字符串数组是可以用数组的形式访问字符串
字符串也是可以用数组的形式访问字符的呀
请各位orz指指路