一道被自己整懵的题目
  • 板块灌水区
  • 楼主Tooler_Yang
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/4/4 21:13
  • 上次更新2023/10/28 04:35:36
查看原帖
一道被自己整懵的题目
377768
Tooler_Yang楼主2022/4/4 21:13
#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指指路

2022/4/4 21:13
加载中...