判断几位数

int jiweishu(int p1){
	int w;
    for(int i=0;i<=8;i++){//4
    	w=p1/(pow(10,i));
    	if(w==0){
    		return i;
    		break;
		}
	}
}

回文数

int jiweishu(int p1){
	int w;
    
    for(int i=0;i<=8;i++){//4
    	w=p1/(pow(10,i));
    	if(w==0){
    		return i;
    		break;
		}
	}
	
}
bool huiwenshu(int n){
    int o=n;
    int q=0;
    int w=jiweishu(n);
    for(int i=1;i<=w;i++){//3
    	q=q*10+n%10;
        n=n/10;
	}
    if(o==q){
        return true;
    }else{
       	return false;
    }
}

判断素数

bool fbq(int k){
	if(k<2){
		return 0;
	}
	if(k==2){
		return 1;
	}
	for(int i=2;i*i<=k;i++){
		if(k%i==0){
			return 0;
		}
	}
	return 1;
}

10进制转k进制

string FBQ_p(unsigned long long decimalNum, int k){
    if (decimalNum == 0) {
        return "0";
    }
    string result; 
    bool isNegative = false;
    if (decimalNum < 0) {
        isNegative = true;
        decimalNum = -decimalNum; 
    }
    const char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    while (decimalNum > 0) {
        int remainder = decimalNum % k; 
        result += digits[remainder];  
        decimalNum = decimalNum / k;  
    }
    if (isNegative) {
        result += '-';
    }
    reverse(result.begin(), result.end());
    return result;
}

k进制转十进制

unsigned long long FBQ_q(const std::string& kNum, int k) {
	unsigned long long decimal = 0;
	unsigned long long startIndex = 0;
	bool isNegative = false;
	if (kNum[0] == '-') {
		isNegative = true;
		startIndex = 1;
	}
	for (unsigned long long i = startIndex; i < kNum.size(); ++i) {
		char c = kNum[i];
		unsigned long long digit;
		if (isdigit(c)) {
			digit = c - '0';
		}
		else if (isalpha(c)) {
			c = toupper(c);
			digit = 10 + (c - 'A');
		}
		decimal = decimal * k + digit;
	}
	if (isNegative) {
		decimal = -decimal;
	}
	return decimal;
}

高精度辅助代码

string removeLeadingZeros(string num) {
    int start = 0;
   
    while (start < num.length() && num[start] == '0') {
        start++;
    }
   
    if (start == num.length()) {
        return "0";
    }
    return num.substr(start);
}
int compare(string a, string b) {
    a = removeLeadingZeros(a);
    b = removeLeadingZeros(b);
    
    if (a.length() > b.length()) return 1;
    if (a.length() < b.length()) return -1;
    
    for (int i = 0; i < a.length(); i++) {
        if (a[i] > b[i]) return 1;
        if (a[i] < b[i]) return -1;
    }
    return 0;
}

高精度加

string add(string a, string b) {
    string res;
    int carry = 0; 
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    
    int max_len = max(a.length(), b.length());
    for (int i = 0; i < max_len || carry; i++) {
        int digit_a = (i < a.length()) ? (a[i] - '0') : 0;
        int digit_b = (i < b.length()) ? (b[i] - '0') : 0;
        int sum = digit_a + digit_b + carry;
        carry = sum / 10;
        res.push_back((sum % 10) + '0');
    }
    
    reverse(res.begin(), res.end());
    return removeLeadingZeros(res);
}

高精度减

string subtract(string a, string b) {
    if (compare(a, b) == 0) {
        return "0";
    }
    string res;
    int borrow = 0; 
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    int max_len = max(a.length(), b.length());
    for (int i = 0; i < max_len; i++) {
        int digit_a = (i < a.length()) ? (a[i] - '0') : 0;
        int digit_b = (i < b.length()) ? (b[i] - '0') : 0;
        digit_a -= borrow;
        borrow = 0;
        if (digit_a < digit_b) {
            digit_a += 10;
            borrow = 1;
        }
        res.push_back((digit_a - digit_b) + '0');
    }
    reverse(res.begin(), res.end());
    return removeLeadingZeros(res);
}

高精度乘

string multiply(string a, string b) {
    a = removeLeadingZeros(a);
    b = removeLeadingZeros(b);
  
    if (a == "0" || b == "0") {
        return "0";
    }
    
    int len_a = a.length(), len_b = b.length();
   
    string res(len_a + len_b, '0');
    
  
    for (int i = len_a - 1; i >= 0; i--) {
        int carry = 0;
        int digit_a = a[i] - '0';
        for (int j = len_b - 1; j >= 0; j--) {
            int digit_b = b[j] - '0';
            int sum = (res[i + j + 1] - '0') + digit_a * digit_b + carry;
            carry = sum / 10;
            res[i + j + 1] = (sum % 10) + '0';
        }
      
        if (carry > 0) {
            res[i] = (res[i] - '0' + carry) + '0';
        }
    }
    
    return removeLeadingZeros(res);
}

高精度除(要用高精度减)

string divide(string a, string b) {
    string remainder;
    a = removeLeadingZeros(a);
    b = removeLeadingZeros(b);
  
    if (b == "0") {
        remainder = "";
        return "";
    }
   
    if (compare(a, b) == -1) {
        remainder = a;
        return "0";
    }
    
    string quotient; 
    remainder = "0"; 
    
   
    for (int i = 0; i < a.length(); i++) {
        remainder = remainder + a[i];
        remainder = removeLeadingZeros(remainder);
        int cnt = 0;
    
        while (compare(remainder, b) >= 0) {
            remainder = subtract(remainder, b);
            cnt++;
        }
        quotient.push_back(cnt + '0');
    }
    
    quotient = removeLeadingZeros(quotient);
    remainder = removeLeadingZeros(remainder);
    return quotient;
}