我最近在课堂上做了一个测试。问题之一是:
给定一个数字n,用C / C ++编写一个函数,该函数返回数字平方的数字总和。(以下内容很重要)。的范围的Ñ为[ - (10 ^ 7),10 ^ 7]。示例:如果n = 123,则您的函数应返回14(1 ^ 2 + 2 ^ 2 + 3 ^ 2 = 14)。
这是我写的函数:
int sum_of_digits_squared(int n)
{
int s = 0, c;
while (n) {
c = n % 10;
s += (c * c);
n /= 10;
}
return s;
}
Run Code Online (Sandbox Code Playgroud)
看着我正确。所以现在测试又回来了,我发现老师由于我不明白的原因没有给我所有的分数。据他说,为了使我的功能更完整,我应该添加以下细节:
int sum_of_digits_squared(int n)
{
int s = 0, c;
if (n == 0) { // …Run Code Online (Sandbox Code Playgroud) 在ac程序中我正在尝试以下操作(只是检查行为)
x = 5 % (-3);
y = (-5) % (3);
z = (-5) % (-3);
printf("%d ,%d ,%d", x, y, z);
Run Code Online (Sandbox Code Playgroud)
给我输出为(2, -2 , -2)gcc.我每次都期待一个积极的结果.模数可以为负数吗?任何人都可以解释这种行为吗?
我一直在编写以下重现关系的程序:
An = 5An-1 - 2An-2 - An-3 + An-4
Run Code Online (Sandbox Code Playgroud)
输出应该是答案模数10 ^ 9 + 7 ..我为此写了一个蛮力方法如下......
long long int t1=5, t2=9, t3=11, t4=13, sum;
while(i--)
{
sum=((5*t4) - 2*t3 - t2 +t1)%MOD;
t1=t2;
t2=t3;
t3=t4;
t4=sum;
}
printf("%lld\n", sum);
Run Code Online (Sandbox Code Playgroud)
其中MOD= 10^9 +7
每件事似乎都是真的..但我得到了一些价值的否定答案..由于这个问题,我无法找到正确的解决方案...... Plz帮助保持正确的地方Modulus
我发现以下代码片段(我认为在维基百科中)会在识别C++注释时创建不同的运行时:
int a = 4 //* This is a comment, but where does it end? */ 2
;
Run Code Online (Sandbox Code Playgroud)
但直到现在,这是唯一一个(不包括变体).
我对区分使用__STDC__等不感兴趣,而不是C89无法编译的程序.
是否有其他程序/片段与C99产生不同的C89运行时间?
可能重复:
C++运算符%保证
在c ++ 98/03中
5.6-4
二元/运算符产生商,二元%运算符从第一个表达式除以第二个表达式得到余数.如果/或%的第二个操作数为零,则行为未定义; 否则(a/b)*b + a%b等于a.如果两个操作数都是非负的,那么余数是非负的; 如果没有,余数的符号是实现定义的.
在c ++ 11中:
5.6 -4
二元/运算符产生商,二元%运算符从第一个表达式除以第二个表达式得到余数.如果/或%的第二个操作数为零,则行为未定义.对于积分操作数,/运算符产生代数商,丢弃任何小数部分;如果商a/b在结果类型中可表示,则为(a/b)*b + a%b等于a.
正如您所看到的那样,为符号位定义的实现缺失了,它会发生什么?
直到最近(即C99),模运算符的行为是在C中定义的实现.由于Perl 5是用C编写的,它是否依赖于用于构建它的C编译器的行为?
为什么以下C代码产生负数作为输出?我该如何防止这种情况发生?
#include <stdio.h>
int main()
{
int i;
char buf[1024];
for (i = 0; i < 1024; i++)
buf[i] = i%256;
for (i=0; i<1024; i++) {
printf("%d ", buf[i]);
if (i%32==31)
printf("\n");
}
}
Run Code Online (Sandbox Code Playgroud) 我们所有的数学书籍都在教导我们,其余的总是积极的.Wiki告诉我,余数可以是最小正余数或最小绝对余数.这是一个非常基本的概念,对很多人(包括我)来说很难忘掉.当程序员使用多种语言时,它可能会导致奇怪的错误.
erlang重新定义这样一个基本概念的原因是什么?
Eshell V6.2 (abort with ^G)
1> -5 rem 3.
-2
该结果与最小正余数或最小绝对余数概念不一致.
鉴于此简单的随机生成器:
int i, r = 0;
for (i = 0; i < 50; i++) {
r = (1234 * r + 101) % (11000000);
printf("%d\n", r);
}
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,我得到负值!
101
124735
10923091
192507
6553739
-7620565
-10842517
-10763989
-1860437
8188139
Run Code Online (Sandbox Code Playgroud)
不应该是积极的价值观吗?有人可以解释一下吗?
我正在尝试编写以下perl子例程.给定的是a长度数组,数组中n的索引i(0<=i<n上游窗口长度u和下游窗口长度)d.
我想迭代上游窗口和下游窗口中的值i.在最简单的情况下,这将迭代a[i-u..i-1](上游窗口)和a[i+1..i+d](下游窗口)中的值.
例如:如果我的数组是1 2 3 4 5 6 7 8 9 10,i=5并且两个窗口大小都是2,则上游值是简单的6 7,下游值是9 10.
但是,有两个并发症:
我想我的数组是循环的.如果i相对较小(接近0)或较大(接近n),则其中一个窗口可能不适合阵列.在这种情况下,我想将数组看作循环数组.例如,如果我的数组是1 2 3 4 5 6
7 8 9 10,i=8并且两个窗口大小都是4,则上游值是简单4 5 6 7但下游值是9 10 1 2.
我宁愿用某种方法迭代这些值而不将它们显式复制到新数组中,因为它们可能很长.
Let's say I have (-5) mod 8.
I tried it in both languages Java and C, and they gave me a -5 result when I was expecting 3.
Why is this happening? Can a modulus be negative? And what should I change to get the correct result?
Java code
public class Example {
public static void main(String[] args) {
int x;
x = -5%8;
System.out.println(x);
}
}
Run Code Online (Sandbox Code Playgroud)
C code
int main(){
int x;
x = -5%8;
printf("%d", x); …Run Code Online (Sandbox Code Playgroud)