我试图看一下这个老问题中发布的代码的反汇编,我发现了一些奇怪的东西。
为了清楚起见,这是源代码:
class ThreadTest
{
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
new Thread(() => Console.WriteLine(i)).Start();
}
}
Run Code Online (Sandbox Code Playgroud)
(当然这个程序的行为是出乎意料的,这不是这里的问题。)
这是我在反汇编中看到的:
internal class ThreadTest
{
private static void Main(string[] args)
{
int i;
int j;
for (i = 0; i < 10; i = j + 1)
{
new Thread(delegate
{
Console.WriteLine(i);
}).Start();
j = i;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在那里做什么j?这是字节码:
.method private hidebysig static
void Main (
string[] args
) …Run Code Online (Sandbox Code Playgroud) 问题描述
数字序列定义如下:
Run Code Online (Sandbox Code Playgroud)f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.给定A,B和n,您将计算f(n)的值.
输入
输入包含多个测试用例.每个测试用例在一行上包含3个整数A,B和n(1 <= A,B <= 1000,1 <= n <= 100,000,000).三个零表示输入结束,并且不处理该测试用例.
产量
对于每个测试用例,在一行上打印f(n)的值.
样本输入
1 1 3
1 2 10
0 0 0
Run Code Online (Sandbox Code Playgroud)
样本输出
2
5
Run Code Online (Sandbox Code Playgroud)
码
#include <iostream>
using namespace std;
int f[54] = {0, 1, 1};
int main()
{
int A, B, n, q = 1;
while (cin >> A >> B >> n && …Run Code Online (Sandbox Code Playgroud)