我想知道在C中是否有特定的算法来做到这一点。然而,我想出了一些方法。
问题是:我有两个7进制的数字。这些数字是可以整除的,所以我的答案总是整数。我想计算一下商。
最简单的方法可能是将以10为底的两个数字从以7为底转换为以10为底的两个数字,然后使用/运算符进行正常除法,然后将答案重新转换回以7为底。
这种方法有很多缺点,时间消耗过多,主要是溢出。如果divident的长度超过大约(17-19),则转换为基数10时的数字将不适合长整型。
在看了很多之后,一个简单的方法是重复乘法。示例202和13我可以在7的基数上重复添加13,直到必须添加多次才能得到202。这就是答案。然而,我无法思考如何将它们相乘。
我在寻求什么帮助?:一种算法/伪代码或代码(C/C,因为这是我唯一知道的语言),用于除以两个数,并获得以7为底的商。结果将是一个完美的整数。
#define max 2000
long long int bconvert(long long int x) //conversion from base 7 to decimal
{ long long int i=0,ans=0;
while(x>0)
{
ans+=(x%10)*pow(7,i);
x/=10;
i++;
}
return ans;
}
int main() {
long long int A,B,L,a,b,c,C,arr[max],i,j,k,arr1[max],r;
scanf("%lld %lld %lld",&A,&B)
a=bconvert(A);
b=bconvert(B);
c=a/b; //decimal division
k=0;
C=0;
while(c>0)
{
r=c%7;
c/=7;
C+=r*pow(10,k);
k++;
}
cout<<C<<endl;
输出是以7为基数的商,形式与输入相同。
我在寻求什么帮助?:一种算法/伪代码或代码(C/C,因为这是我唯一知道的语言),用于除以两个数字,并以7为基数获得商。
将基数7中的数字理解为基数10中的数字,这是一种曲折的过程。相反,根据输入和输出的真实基数转换数字;那就直截了当了。
#include <stdio.h>
#include <stdlib.h>
long long scanbase7()
{
char str[24];
return scanf("%23s", str) > 0 ? strtoll(str, NULL, 7) : -1;
}
void printbase7(long long n)
{
long long p = 1;
while (n/p > 7) p *= 7;
do putchar('0'+n/p), n %= p; while (p /= 7);
puts("");
}
int main()
{
long long a, b, c;
a = scanbase7();
b = scanbase7();
c = a/b;
printbase7(c);
}
抱歉,没有时间发布完整的代码(今天晚些时候会做很多),但以下至少是“字符串”划分的一个很好的大纲。
#include <stdlib.h>
#include <string.h>
// Assume no illegal characters
char *strdivide(char *quotient, const char *dividend, const char *divisor,
unsigned base) {
// consume leading zeros
while (*dividend == '0' && dividend[1]) dividend++;
while (*divisor == '0' && divisor[1]) divisor++;
// Detect /0
if (strcmp(divisor, "0")==0) {
return "Division by 0";
}
// Detect dividend obviousl smaller than divisor
size_t dd_size = strlen(dividend);
size_t dv_size = strlen(divisor);
if (dd_size < dv_size) {
return strcpy(quotient, "0");
}
// Work with copy of dividend
char div[dd_size + 1];
memcpy(div, dividend, dd_size + 1);
// Form quotient
size_t places = dd_size - dv_size;
for (size_t i = 0; i<=places; i++) {
// Assume ASCII
int digit = 0;
while (strcmp(div, divisor) >= 0)) {
int borrow = 0;
for (unsigned j = dv_size; j-- > 0; ) {
int diff = value(div[j]) - value(divisor[j]) - borrow;
if (diff < 0) {
diff += base;
borrow = 1;
} else {
borrow = 0;
}
div[j] = unvalue(diff);
}
}
quotient[i] = unvlaue(digit); // int to char
}
quotient[i] = '\0';
// Check for leading 0 in `quotient[]`, shift if needed.
return quotient;
}
您可以直接在输入字符串上实现长除法算法。
另一种选择是将数字转换为以16807为基数(7**5)的任意精度整数,在该基数中进行除法,然后将结果转换回以7为基数。
本文向大家介绍加基数n,包括了加基数n的使用技巧和注意事项,需要的朋友参考一下 在这个问题上,给出了两个数字。这些数字的底数为n。我们还必须在以n为底的加法中找到这些数字的结果。 首先,将数字转换为十进制数字。从十进制值中,我们可以简单地将它们相加。最后,数字再次转换为以n为底的数字。 n个基数以字符串形式给出,因为对于那些基数大于9的数字,它可能包含一些字母来表示数字,例如十六进制数字,则有6个
问题内容: 从有关对数的numpy文档中,我发现了以 e ,2和10为底取对数的函数: 但是,如何在numpy中使用以 n 为底的对数(例如42)? 问题答案: 要使用自定义底数获取对数,请使用: 要使用自定义底数获取对数,请使用: 如您所料,请注意默认情况下。 提醒一下,对数基数更改规则是:
我一直陷在这个问题中,找不到有效的解决办法。 我有N(高达1000万)说最大100个元素的数组。这些数组包含1-10000的数字。 现在我的问题是将这些数组划分为K个组,这样我就可以最小化所有数组中的重复项,即一个数组包含1,4,10,100,另一个数组包含1100。我希望他们进入同一组,因为这样可以最大限度地减少口是心非。我的问题的两个限制条件如下- > 组中向量的数量应均匀分布。 根据大小以递
问题内容: 我对Apache Spark和Python比较陌生,想知道像我将要描述的东西是否可行? 我有一个格式为[m 1,m 2,m 3,m 4,m 5,m 6, … m n ]的RDD(运行rdd.collect()时会得到这个)。我想知道是否有可能将此RDD转换为[[m 1,m 2,m 3),(m 4,m 5,m 6).....(m n-2, m n-1,m n)]。内部元组的大小应为k。如
如何将整数数组划分为N个子集,使这些子集的和最小? 例如,数组由11个元素组成,我需要其中的6个子集。 子集:<code>{2,1,1,3},{4},}4,3},}3,2},1,2},{3}</code>最小和=7。 另一个答案是:最小和=7。 注意:在分区时,必须保持数字在原始集合中出现的顺序。
该问题给出了两个输入:数组(arr)和由数组构成子数组的次数(n)。子数组的和应该是奇数 已经很清楚,如果所有的数字都是偶数。奇数和子数组是不可能的。对于奇数和,连续的2个数字应该是奇数+偶数或者偶数+奇数。但我似乎不能把它们分成N个子数组。请帮忙解释一下逻辑。