- gf25031 的博客
代码
- @ 2026-3-31 12:48:18
判断几位数
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;
}