有源程序test1-1.c,该程序的功能是:依次取出正长整型变量s中偶数位上的数(从右往左的顺序),构成一个新数放在t中。例如数为1234567的时,t 中的数为246;数为12345678的时,t 中的数为1357。改正其中的错误。 源程序test1-1.c代码如下: #include <stdio.h> void fun(long s , long t ) { long s1=10; s/=10; *t=s/10 ; while(s<0) { s=s%100; *t=s%10*s1; s1=s1*10; } } void main() { long s,t; scanf("%ld",&s); if(s>0) { fun(s,&t); printf("%ld\n", t); } else printf("s value error\n"); }
时间: 2024-03-05 17:54:34 浏览: 88
修改后的代码如下:
```c
#include <stdio.h>
void fun(long s, long *t) {
long s1 = 10;
s /= 10;
*t = s % 10;
while(s > 0) {
s /= 100;
*t = (*t) + (s % 10) * s1;
s1 *= 10;
}
}
int main() {
long s, t;
scanf("%ld", &s);
if(s > 0) {
fun(s, &t);
printf("%ld\n", t);
}
else
printf("s value error\n");
return 0;
}
```
主要修改如下:
1. 在函数`fun`中,将`s/=10`和`*t=s/10`的顺序交换,因为需要先获取偶数位上的数字。
2. 在`while`循环中,循环条件应该是`s>0`而不是`s<0`,否则会导致无限循环。
3. 在`while`循环中,每次循环应该将`s`除以100,而不是除以10,因为需要取偶数位上的数字。
4. 在`while`循环中,需要将新的数字放在`t`的高位,因此需要一个变量`s1`来表示当前位数,初始值为10,每次循环需要乘以10。
此外,`main`函数的返回值应该是`int`类型,应该加上`return 0;`语句。另外,函数`fun`中的第二个参数应该是一个指针类型。
相关问题
q = F.normalize(q.view(self.dim, 1), p=2, dim=0) #转置-----将张量q的形状变为self.dim行,1列的形状,然后使用F.normalize函数对其进行归一化操作 feat_all = F.normalize(feat_all, p=2, dim=1) #feat_all是一个特征矩阵,每一行代表一个样本的特征 #使用F.normalize函数对feat_all进行归一化操作,其中参数dim=1表示对每一行进行归一化。这样做可以确保每个样本的特征向量长度为1,使得它们在特征空间中具有相同的尺度 q2all = torch.mm(feat_all, q.view(self.dim, 1)).squeeze(-1) #计算节点与q之间的相似度 pos_len = torch.sum(labels, dim = 0) #正长节点 neg_len = q2all.size(0) - pos_len #异常节点 # pos [P]; neg [Neg] q2all_pos, q2all_neg = torch.split(q2all, [pos_len, neg_len], dim = 0)这段代码什么意思
这段代码的主要作用是计算节点与查询向量(q)之间的相似度,并将相似度分为正例(正常节点)和负例(异常节点)。
首先,使用`F.normalize`函数对查询向量(q)进行归一化操作,将其形状变为`self.dim`行,1列的形状。这可以确保查询向量的长度为1,使得其在特征空间中具有相同的尺度。
然后,使用`F.normalize`函数对特征矩阵(feat_all)进行归一化操作,其中参数`dim=1`表示对每一行进行归一化。这样做可以确保每个样本的特征向量长度为1,使得它们在特征空间中具有相同的尺度。
接下来,使用`torch.mm`函数计算特征矩阵(feat_all)与查询向量(q)之间的相似度。`torch.mm`函数将特征矩阵与查询向量进行矩阵乘法,并得到一个列向量。使用`squeeze(-1)`函数将该列向量的维度从1降低到0。
然后,使用`torch.split`函数将相似度分为正例(正常节点)和负例(异常节点)。`torch.split`函数接受两个参数,第一个参数是待分割的张量(这里是相似度),第二个参数是一个列表,指定分割后每部分的长度。在这里,列表中的第一个元素是正例的长度(即正常节点的数量),第二个元素是负例的长度(即异常节点的数量)。最终,将得到两个张量:`q2all_pos`表示正例的相似度,`q2all_neg`表示负例的相似度。
总结起来,这段代码的目的是对查询向量和特征矩阵进行归一化操作,并计算节点与查询向量之间的相似度,然后将相似度分为正例和负例。
阅读全文